題目:
給定一棵二叉樹,找到兩個節點的最近公共父節點(lca)。
最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。
/*** definition of treenode:
* public class treenode
* }*/
/*初首先看看3和5,這兩個節點分居根節點4的兩側,
如果可以從子節點往父 節點遞推,那麼他們將在根節點4處第一次重合;
再來看看5和6,這兩個都在根節點4的右側,沿著父節點往上遞推,他們將在節點7處第一次重合;
最 後來看看6和7,此時由於7是6的父節點,故7即為所求。
從這三個基本例子我們可以總結出兩種思路——自頂向下(從前往後遞推)和自底向上(從後 往前遞推)。
順著上述例項的分析,我們首先看看自底向上的思路,自底向上的實現用一句話來總結就是——
如果遍歷到的當前節點是 a/b
中的任意乙個,那麼我們就向父節點匯報此節點,否則遞迴到節點為空時返回空值
。具體來說會有如下幾種情況:
1.當前節點不是兩個節點中的任意乙個,此時應判斷左右子樹的返回結果。
1.若左右子樹均返回非空節點,那麼當前節點一定是所求的根節點,將當前節點逐層向前匯報。// 兩個節點分居樹的兩側
2.若左右子樹僅有乙個子樹返回非空節點,則將此非空節點向父節點匯報。
// 節點僅存在於樹的一側
3.若左右子樹均返回null, 則向父節點返回null. // 節點不在這棵樹中
2.當前節點即為兩個節點中的乙個,此時向父節點返回當前節點*/
// version : divide & conquer
public class solution
}
Lintcode 最近公共祖先
給定一棵二叉樹,找到兩個節點的最近公共父節點 lca 最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。假設給出的兩個節點都在樹中存在 yes樣例對於下面這棵二叉樹 4 3 7 5 6 definition of treenode class treenode class solution if...
LintCode 88 最近公共祖先
給定一棵二叉樹,找到兩個節點的最近公共父節點 lca 最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。假設給出的兩個節點都在樹中存在 樣例 樣例 1 輸入 1,1 輸出 1 解釋 二叉樹如下 只有乙個節點 1lca 1,1 1 樣例 2 輸入 3,5 輸出 4 解釋 二叉樹如下 4 3 7 5...
LintCode 88 最近公共祖先
給定一棵二叉樹,找到兩個節點的最近公共父節點 lca 最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。注意事項 假設給出的兩個節點都在樹中存在 樣例對於下面這棵二叉樹 標籤code definition of treenode class treenode class solution pat...