LeetCode——最近公共祖先

WYFVV發表於2020-10-11

題目一:給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

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); //在左子樹查詢p或者q,找到了就返回
        TreeNode right=lowestCommonAncestor(root.right,p,q); //在右子樹查詢p或者q,找到了就返回
        if(left==null)  //如果左子樹為空,則p和q位於右子樹,第一個返回的就是公共子樹
        {
            return right;
        }
        else if(right==null)
        {
            return left;
        }
        else{  //說明p和q不在同一側
            return root;
        }
        
    }

題目二:給定一個二叉搜尋樹, 找到該樹中兩個指定節點的最近公共祖先。

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); //在左子樹查詢p或者q,找到了就返回
        TreeNode right=lowestCommonAncestor(root.right,p,q); //在右子樹查詢p或者q,找到了就返回
        if(left==null)  //如果左子樹為空,則p和q位於右子樹,第一個返回的就是公共子樹
        {
            return right;
        }
        else if(right==null)
        {
            return left;
        }
        else{  //說明p和q不在同一側
            return root;
        }
        
    }

 

相關文章