給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。
如果從最近公共祖先找兩個指定節點:這兩個指定節點一定不在同乙個子樹中。
這道題有點神奇,要找最近公共祖先,我們從樹的根節點往下操作
我們設乙個輔助方法(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,...