LeetCode每日1题--二叉搜索树中的众数

42 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情

前言

算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image-20220705103735001

刷题网站

代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!

画图软件

OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!

笔记软件

Typoral

题目

image.png

解析

递归三部曲

  1. 确定递归的参数和返回值

最后返回的是一个节点,所以返回值为TreeNode

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {}
  1. 确定递归终止的条件

如果节点为空,则返回根节点

if (root == null || root == p || root == q) { // 递归结束条件
    return root;
}
  1. 确定单层递归的逻辑

  2. 求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从低向上的遍历方式。

// 后序遍历
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);

if(left == null && right == null) { // 若未找到节点 p 或 q
    return null;
}else if(left == null && right != null) { // 若找到一个节点
    return right;
}else if(left != null && right == null) { // 若找到一个节点
    return left;
}else { // 若找到两个节点
    return root;
}

完整代码

没什么好说的,就是刷就完了。