Leetcode235/236之树最近公共祖先以及递归中带TreeNode
树最近公共祖先以及递归中带TreeNode
- 但递归时返回TreeNode要想清楚最后一步返回到哪
Leetcode236-二叉树的最近公共祖先
- 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
- 输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
- 输出:3
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null || 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) { // 若未找到节点 p 或 q
            return null;
        }else if(left == null && right != null) { // 若找到一个节点
            return right;
        }else if(left != null && right == null) { // 若找到一个节点
            return left;
        }else { // 若找到两个节点
            return root;
        }
    }
Leetcode235-二叉搜索树的最近公共祖先
- 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先
- 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
- 输出: 6
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        
        if(root.val>p.val && root.val>q.val){
            TreeNode leftNode=lowestCommonAncestor(root.left,p,q);
            return leftNode;
        }
        if(root.val<p.val && root.val<q.val){
            TreeNode rightNode=lowestCommonAncestor(root.right,p,q);
            return rightNode;
        }
        
        return root;
    }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号