• 二叉树的公共祖先likou236


    这是一个很不错的题目,让我复习了叶子节点遍历到根节点的方法。

    在说着提之前,我们来说说后续遍历:

    后序遍历是一个左右中的方式,当我们画好二叉树的 图,更着遍历一遍的时候,就会发现:

    边完了去边,边完了再去间。

    是不是有一种从写往上遍历的感觉!!!

    咱们来仔细分析一下这个题:

    公共祖先是啥?

    就是同一个间接的根节点。 

    我们第一个想到的就是头部根节点,它是所有节点的公共祖先

    这题说,求最近的公共祖先。

    也就是可以这样认为:

    一个根节点,左边有p或者q,右边有p或者。

    题目说了,所有元素不会重复,p,q也一样。

    所以,我们就可以利用后续遍历,然后判断每次的节点左右是否满足这个条件,

    当然,其中有几个多的条件:

    当左右节点都为空时,返回当前根节点。

    当左节点不为空,就返回左节点,右节点不为空,返回右节点。

    想法肯定简单,实现起来,就烧脑了:

    1. class Solution {
    2. public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    3. return dfs(root, p, q);
    4. }
    5. private TreeNode dfs(TreeNode root, TreeNode p, TreeNode q) {
    6. if (root == null) {
    7. return null;
    8. }
    9. if (root.val == p.val) {
    10. return p;
    11. } else if (root.val == q.val) {
    12. return q;
    13. } else {
    14. TreeNode l = dfs(root.left, p, q);
    15. TreeNode r = dfs(root.right, p, q);
    16. if (l != null && r != null) {
    17. return root;
    18. } else if (l != null) {
    19. return l;
    20. } else if (r != null) {
    21. return r;
    22. } else {
    23. return null;
    24. }
    25. }
    26. }
    27. }

    本体思路我确实看的别人的,但是这个代码确确实实时自己写的,难度确实不大,思路很重要,我得多去看看别人的思路,好好学学了~ 

  • 相关阅读:
    Reggie外卖项目 —— 分类管理模块之分类信息分页查询功能
    TextRCNN、TextCNN、RNN
    弱引用回调引发的坑
    RHEL7.9使用CentOS源
    关于SQLSERVER触发器的一个问题
    优秀的项目经理需要具备哪些能力?很关键
    2022深入学习C++教程
    非线性化改进的KP-Detector模型在人体姿态识别中的应用
    手机备忘录导到电脑上有什么方法简单点
    美国博士后招聘|贝勒医学院—神经系统疾病
  • 原文地址:https://blog.csdn.net/qx020814/article/details/127610326