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;
    }
posted @ 2022-04-12 15:38  fao99  阅读(28)  评论(0)    收藏  举报