設計並實現乙個演算法,找出二叉樹中某兩個節點的第乙個共同祖先。不得將其他的節點儲存在另外的資料結構中。注意:這不一定是二叉搜尋樹。
例如,給定如下二叉樹: root =[3
,5,1
,6,2
,0,8
,null,null,7,
4]3/ \
51/ \ / \62
08/ \ 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,8
,null,null,7,
4], p =
5, q =
4輸出:
5解釋: 節點 5 和節點 4 的最近公共祖先是節點 5。因為根據定義最近公共祖先節點可以為節點本身。
說明:所有節點的值都是唯一的。
p、q 為不同節點且均存在於給定的二叉樹中。
struct treenode *
lowestcommonancestor_helper
(struct treenode * root,
struct treenode * p,
struct treenode * q)
;bool covers
(struct treenode * root,
struct treenode * p)
;struct treenode*
lowestcommonancestor
(struct treenode* root,
struct treenode* p,
struct treenode* q)
bool covers
(struct treenode * root,
struct treenode * p)
struct treenode *
lowestcommonancestor_helper
(struct treenode * root,
struct treenode * p,
struct treenode * q)
面試題 04 08 首個共同祖先
設計並實現乙個演算法,找出二叉樹中某兩個節點的第乙個共同祖先。不得將其他的節點儲存在另外的資料結構中。注意 這不一定是二叉搜尋樹。例如,給定如下二叉樹 root 3 1,節點p或者q是root節點,返回根節點 if root val p val root val q val treenode lef...
程式設計師面試金典
1.有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階 2階 3階。請實現乙個方法,計算小孩有多少種上樓的方式。為了防止溢位,請將結果mod 1000000007 給定乙個正整數intn,請返回乙個數,代表上樓的方式數。保證n小於等於100000。int countways int n retu...
程式設計師面試金典 2 2
return kth to last 返回單鏈表中倒數第k個元素。下面會分別使用遞迴和非遞迴的方法來解決這道題,一般來說遞迴的方法寫起來更容易,但是效率一般不是最好的,比如這道題遞迴解法的 量大約是非遞迴解法的一半,但是時間複雜度依然是o n 遞迴解法。這種方法的本質是先遍歷到鍊錶尾部,最後再返回的...