二叉樹的最近公共祖先

2021-09-23 13:33:19 字數 1201 閱讀 6201

輸入: 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 treenode lowestcommonancestor(treenode root, treenode p, treenode q) 

stackstack1=new stack<>();

findpath(root,p,stack1,new treenode(0));

stackstack2=new stack<>();

findpath(root,q,stack2,new treenode(0));

treenode common=null;

for(int i=0;istack,treenode flag)

findpath(root.left,search,stack,flag);

findpath(root.right,search,stack,flag);

if(flag.val!=1)

}

public treenode lowestcommonancestor2(treenode root, treenode p, treenode q) 

treenode left=lowestcommonancestor2(root.left,p,q);

treenode right=lowestcommonancestor2(root.right,p,q);

if(left!=null&&right!=null)

return root;//查詢節點分別位於root節點的左右子樹中

if(left==null)//查詢節點均位於root節點的右子樹中

return right;

if(right==null)//查詢節點位於root節點的左子樹中

return left;

return null;

}

普通樹的最近公共祖先。

二叉樹的最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 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 示例 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,...

二叉樹的最近公共祖先

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15用例 lca 9,11 2 lca 9.6 1 lca 12,3 1 分析 從用例中看,9的祖先是 9 2 4 4 2 2 2 2 1,即 4,2,1都是9的祖先 11的祖先有 11 2 5,5 2 2,2 2 1 所以這是乙個有...