二叉樹中兩節點的最低公共祖先

2021-10-09 20:50:02 字數 1379 閱讀 6400

二叉樹中兩節點的最低公共祖先

要求如下:

給定乙個頭節點head

和另外兩個節點 a b

返回 a 和 b 的最低公共祖先

**和思路如下:

package beginner.tree;

/** * 給定乙個頭節點head

* 和另外兩個節點 a b

* 返回 a 和 b 的最低公共祖先

* * @auther: 蘇察哈爾丶燦

* @date: 2020/9/28 14:10

* @slogan: 我自橫刀向天笑,笑完我就去睡覺。

*/public

class

lowparentnode

// 收集的資訊

private

static

class

info

}public

static info process

(node node, node nodea, node nodeb)

// 本節點要整理上返的資訊

node answer = null;

boolean finda =

false

;boolean findb =

false

; info leftinfo =

process

(node.left, nodea, nodeb)

; info rightinfo =

process

(node.right, nodea, nodeb)

;// 當前節點有咩有找到 a / b

finda = node == nodea || leftinfo.finda || rightinfo.finda;

findb = node == nodeb || leftinfo.findb || rightinfo.findb;

if(leftinfo.answer != null)

if(rightinfo.answer != null)

// 經歷了上述過程 子樹還是沒有找到的話

// 判斷自己有沒有 是不是符合

if(answer == null)

}return

newinfo

(answer, finda, findb);}

public

static

void

main

(string[

] args)

}

二叉樹中兩個節點的最低公共祖先

求二叉樹樹中的兩個節點的最低公共祖先是個有趣的問題,涉及到對遞迴的理解。可以參考部落格 下面是乙個簡單的複雜度為 o n 的演算法,解決lca問題 1 找到從根到n1的路徑,並儲存在乙個向量或陣列中。2 找到從根到n2的路徑,並儲存在乙個向量或陣列中。3 遍歷這兩條路徑,直到遇到乙個不同的節點,則前...

求二叉樹中兩個節點的最低公共祖先

結點結構 template struct binarysearchtreenode binarysearchtreenode left binarysearchtreenode right binarysearchtreenode parent v val 尋找最低公共祖先 binarysearch...

235 二叉樹最低公共祖先

給定乙個二叉搜尋樹,找到該樹中兩個指定節點的最近公共祖先。最近公共祖先的定義為 對於有根樹 t 的兩個結點 p q,最近公共祖先表示為乙個結點 x,滿足 x 是 p q 的祖先且 x 的深度盡可能大 乙個節點也可以是它自己的祖先 例如,給定如下二叉搜尋樹 root 6,2,8,0,4,7,9,nul...