• 常用数据结构算法:二叉树的最近公共祖先


    在博客当中看到了一个对二叉树的最近公共祖先的巧解,代码也很是简单,特此用博客记录一下别人大神的思路。

    思路来自:http://blog.csdn.net/github_34514750/article/details/52229129

    遍历判断两个node是否在左右子树中 
    一般递归都分为两块返回值; 
    第一块返回值(开头): 
    针对l或者r的返回,也就是标记,我自己称为小返回 
    第二块返回值(结尾): 
    l和r已经获取完毕,对上一层的返回,我自己称为大返回

    public class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            // 左右子树探索时发现目标节点,则通过返回值标记
            if(root == null || p == root || q == root) {
                return root;
            }
    
            // 查看左子树中是否有目标结点,没有为null
            TreeNode l = lowestCommonAncestor(root.left,p,q);
            // 查看右子树中是否有目标结点,没有为null
            TreeNode r = lowestCommonAncestor(root.right,p,q);
    
            //都不为空,说明做右子树都有目标结点,则公共祖先就是本身
            if(l!= null && r!= null) {
                return root;
            }
            // 其他情况,则要继续向上标记,显示此节点下边有目标节点
            return l != null?l:r;
        }
    }

    这种解法适用于各类二叉树的最近公共祖先的解法。无需考虑是否是搜索树。很是巧妙,并且代码简单易读、

  • 相关阅读:
    记录ICallbackEventHandler 同时并发访问容易引发的问题
    IIS 属性
    Solaris10 安装
    VerifyRenderingInServerForm和EnableEventValidation引发的两个问题
    Solaris 上网配置
    动态数据类型转换
    RDLC 折线图
    codesmith复制中文乱码解决
    关于手机等品牌型号搜索与采集的中文分词分离
    说点包租公限制共享上网的破事
  • 原文地址:https://www.cnblogs.com/WellHold/p/7538174.html
Copyright © 2020-2023  润新知