1. 程式人生 > >LeetCode 236. Lowest Common Ancestor of a Binary Tree

LeetCode 236. Lowest Common Ancestor of a Binary Tree

題解

求解最近公共父節點,比較經典的題目。 思路是二路dfs。沿著左右下行,終結條件是 空節點 或者 root==(p or q)。 那麼此時,Left Right 有三種情況

  1. 均非空:左右兩子樹剛好各有一個目標節點,此時root就是父節點。
  2. 一空一非空:空端子樹沒有目標節點,非空一端子樹為父節點。
  3. 雙空:捨棄。

為什麼這樣可行,因為遞迴作用下,但凡返回的是非空那麼該子樹必然至少含有一個目標節點。 若有疑問,可舉例理解。

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); } };