2021.11.19 - SX07-27.二叉树的最近公共祖先

1. 题目

在这里插入图片描述
在这里插入图片描述

2. 思路

(1) 递归

  • 递归函数的返回值为包含p或q的结点。
  • 若根结点的左子树不包含p和q,则p和q必然存在于右子树中;若根结点的右子树不包含p和q,则p和q必然存在于左子树中;若根结点的左右子树都包含p或q,则返回根结点即可。

3. 代码

public class Test {
    
    
    public static void main(String[] args) {
    
    
    }
}

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

猜你喜欢

转载自blog.csdn.net/qq_44021223/article/details/121419457