二叉樹的最近公共祖先

2021-10-17 03:45:17 字數 1029 閱讀 2616

二叉樹的最近公共祖先

若為傳統的tree_node求解問題*

基本思路:

採取dfs方式,對於當前節點,研究是否為目標節點的乙個。然後根據遞迴子問題的返回,若其中乙個子樹返回2,那麼說明問題已經在子樹中解決,否則,計算子樹返回的數目+當前節點是否為目標點的數目。最後返回

若為多組目標點求解問題

基本思路:

首先通過dfs建立每個節點=》節點level深度的對映。同時建立每個節點=》父親節點的對映。(物理儲存可能採取map或者陣列方式)

然後lca演算法過程,首先研究兩個點是否在同一level。如果不在,將低level的點沿著父親節點方向移動。直到兩個點在同一level。最後兩者一起向父親節點移動,直到相等(重合)

**實現

#include#includeusing namespace std;

struct node

;void dfs(vector&arr,int root,int level) //由root開始生成每棵樹的level

int lca(vector&arr,int o1,int o2) //尋找o1 o2的最近祖先

else if(arr[o1].level>n>>root;

vectorarr(n+1);

for(int i=0;i>fa>>lc>>rc;

arr[fa].l=lc;

arr[fa].r=rc;

if(lc)

arr[lc].parent=fa;

if(rc)

arr[rc].parent=fa;

}dfs(arr,root,1);

int m;

cin>>m;

while(m--)

}

二叉樹的最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 思路 剛開始使用boolean來判斷要查詢的兩節點在左右孩子上,後面修改為使用treenode與null判斷兩節點位置 1 分別向左孩子和右孩子遞迴。2 若當...

二叉樹的最近公共祖先

輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 4 輸出 5 法1 分別找出根節點到兩個節點的路徑,則最後乙個公共節點就是最低公共祖先。法2 public treen...

二叉樹的最近公共祖先

例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 3。示例 2 輸入 root 3,5,1,6,2,0,...