AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

AcWing 88. 树中两个结点的最低公共祖先    原题链接    中等

作者: 作者的头像   @zengjx ,  2020-04-04 16:42:05 ,  阅读 198


0


后序遍历,递归O(n)
遍历的当前节点为cur,因为是后序遍历,
要先处理左右子树分别返回left,和right;

1.如果root 为空返回null
2. 如果一为root 则返回 root
3.遍历左子树得到left
4.遍历右子树得到right
5.如果left和right 都在则 返回root
6.如果left 存在则返回left ,如果left或者right 其中一个为null
另外一个不是为空则返回不是空的那一个。
7.返回right
```
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {

    if(root==null){
        return null;
    }
    if(root==p || root ==q) 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 left;
    return  right ;
}

}

0 评论

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息