二叉樹的最近公共祖先

2021-09-11 22:13:44 字數 1318 閱讀 3167

給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

例如,給定如下二叉樹:  root = [3,5,1,6,2,0,8,null,null,7,4]

思路:(剛開始使用boolean來判斷要查詢的兩節點在左右孩子上,後面修改為使用treenode與null判斷兩節點位置)

1、分別向左孩子和右孩子遞迴。

2、若當前節點等於要查詢的兩節點之一則返回當前節點。

3、若左孩子和右孩子均不為null,則為公共祖先節點返回。

4、若左孩子不為null,右孩子為null,則查詢的兩節點以及其公共節點在左孩子上,返回左孩子。

5、若右孩子不為null,左孩子為null,則查詢的兩節點以及其公共節點在右孩子上,返回右孩子。

6、其他情況均返回null。

class solution 

/*通過返回true或false判斷尋找的點在哪條分支,其實也可以直接返回所在分支的根節點,見下面未標為備註的思路

public boolean lowestcommon(treenode root, treenode p, treenode q)

boolean left = lowestcommon(root.left,p,q);

boolean right = lowestcommon(root.right,p,q);

boolean current = false;

if(root.val==p.val||root.val==q.val)

if(left&&right&&!current||left&¤t&&!right||right&¤t&&!left)

return left||right||current;

}*/public treenode lowestcommon(treenode root, treenode p, treenode q)

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

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

if(root.val==p.val||root.val==q.val)

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

if(left!=null)

if(right!=null)

return null;}}

二叉樹的最近公共祖先

輸入 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,...

二叉樹的最近公共祖先

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 所以這是乙個有...