Java LeetCode236。バイナリツリーの最も近い共通の祖先

二分木が与えられた場合、ツリー内の指定された2つのノードの最も近い共通の祖先を見つけます。
Baidu百科事典での最も近い共通祖先の定義は次のとおりです。「ルートツリーTの2つのノードpとqの場合、最も近い共通祖先はノードxとして表されるため、xはpとqの祖先であり、 xは可能な限り大きくなります(ノードはそれ自体の祖先になることもできます)。 "
たとえば、次のバイナリツリーがあるとします。root= [3,5,1,6,2,0,8、null、null、7、 4]

ここに画像の説明を挿入

左(右)サブツリーがない場合は、最初に見つかった右(左)サブツリーに戻ります。

左右のサブツリーが見つかった場合、ルートノードが直接返されます

/**
 * 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||root==p||root==q){
    
    
            return root;
        }

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

        if(ps==null){
    
    
            return qs;
        }
        if(qs==null){
    
    
            return ps;
        }
        return root;
    }
}

おすすめ

転載: blog.csdn.net/sakura_wmh/article/details/110727360