二叉樹的最近公共祖先
若為傳統的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,...