二叉樹的最近公共祖先

2021-09-29 12:19:49 字數 1137 閱讀 1186

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

如果從最近公共祖先找兩個指定節點:這兩個指定節點一定不在同乙個子樹中。

這道題有點神奇,要找最近公共祖先,我們從樹的根節點往下操作

我們設乙個輔助方法(boolean)幫我們找指定節點,如果找到了,返回1

逼近條件:

root為空時,不會包含任何節點,返回null

深陷遞迴,如果當前節點為指定節點,說明找到了(否則遍歷左子樹,右子樹)

if

(root == null)

int mid =

(root == p || root == q)?1

:0;

接著建立兩個int變數儲存左右子樹找到指定節點的個數,

遞迴過去,返回到乙個層,如果此時mid+left+right = 2 說明左子樹找到乙個右子樹找到乙個,這個層就是公共祖先

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

findnode

(root,p,q)

;return lca;

}public

boolean

findnode

(treenode root, treenode p, treenode q)

int mid =

(root == p || root == q)?1

:0;int left =

findnode

(root.left,p,q)?1

:0;int right =

findnode

(root.right,p,q)?1

:0;if

(mid + left + right >=2)

return

(mid + left + right)

>0;

}}

找到兩個也返回1是因為大祖宗也是公共祖先呀,但是他並不是最近的。大祖宗左子樹找到兩個返回1,右子樹肯定找不到。所有mid+left+right = 1不是最近的祖宗。

二叉樹的最近公共祖先

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