2021-03-06

Leetcode 246 二叉数的最近公共祖先

递推算法感悟

1.递推时自底向上的算法,真正的原理是从叶子结点开始一步一步向上推进

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {

        if (root == null)
            return null;
        if (root.val ==p.val || root.val == q.val)
            return root;
        TreeNode left = lowestCommonAncestor(root.left,p,q);
        TreeNode right = lowestCommonAncestor(root.right,p,q);
         if(left!= null  && right != null) 
            return root;
        if (left == null)
            return right;
        if (right == null)
            return left;
        return null;
    }

2.在下面这段代码之前,对当前结点的判断

搜索到边界条件时停止递归的条件,每次递归到的结点都会进行此判断

        if (root == null)
            return null;
        if (root.val ==p.val || root.val == q.val)
            return root;

3.这两句是对递归得到的结果,开启了递归

        TreeNode left = lowestCommonAncestor(root.left,p,q);
        TreeNode right = lowestCommonAncestor(root.right,p,q);

4.每段递归结束后对结果的处理

        if(left!= null  && right != null) 
            return root;
		if (left == null)
            return right;
        if (right == null)
            return left;

本题思路

当遍历到一个结点treeNode的时候,如果当前结点的值为p.val 或者q.val,

结论

        TreeNode left = lowestCommonAncestor(root.left,p,q);
        TreeNode right = lowestCommonAncestor(root.right,p,q);

是对左右子树的遍历

         if(left!= null  && right != null) 
            return root;
        if (left == null)
            return right;
        if (right == null)
            return left;
        return null;

是对左右子树得到结果的处理

        if (root == null)
            return null;
        if (root.val ==p.val || root.val == q.val)
            return root;

这个可以看成是对叶子结点的处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值