程式設計師面試金典 0408 首個共同祖先

2021-10-18 13:22:13 字數 1265 閱讀 2601

設計並實現乙個演算法,找出二叉樹中某兩個節點的第乙個共同祖先。不得將其他的節點儲存在另外的資料結構中。注意:這不一定是二叉搜尋樹。

例如,給定如下二叉樹: 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 遞迴解法。這種方法的本質是先遍歷到鍊錶尾部,最後再返回的...