LeetCode 236. Lowest Common Ancestor of a Binary Tree
阿新 • • 發佈:2018-12-13
題解
求解最近公共父節點,比較經典的題目。 思路是二路dfs。沿著左右下行,終結條件是 空節點 或者 root==(p or q)。 那麼此時,Left Right 有三種情況
- 均非空:左右兩子樹剛好各有一個目標節點,此時root就是父節點。
- 一空一非空:空端子樹沒有目標節點,非空一端子樹為父節點。
- 雙空:捨棄。
為什麼這樣可行,因為遞迴作用下,但凡返回的是非空那麼該子樹必然至少含有一個目標節點。 若有疑問,可舉例理解。
Code
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root==NULL||root==q||root==p){
return root;
}
TreeNode *l=lowestCommonAncestor(root->left,p,q);
TreeNode *r=lowestCommonAncestor(root->right,p,q);
if(l!=NULL &&r!=NULL ) return root;
return (l!=NULL ? l:r);
}
};