1. 程式人生 > >二叉樹的最近公共父節點

二叉樹的最近公共父節點

題目

求二叉樹兩個節點的最近公共父節點

思路

遞迴,邊界條件為空節點或兩個節點的其中一個
如果node的左節點是a,b的公共父節點,則在其右子樹中嘗試查詢a,b最後結果必然是NULL,反之亦然。
所以當node的左右節點查詢結果都不為空的時候,說明該點就是最近公共父節點。

程式碼

TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q){
    if(!root||root==p||root==q)
        return root;
    TreeNode left = lowestCommonAncestor(root.left
, p, q); TreeNode right = lowestCommonAncestor(root.right, p, q); if(left&&right) return root; if(!left) return right; if(!right) return left; }