lintcode 最近公共祖先

2021-08-03 17:29:48 字數 855 閱讀 8232

題目:

給定一棵二叉樹,找到兩個節點的最近公共父節點(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...