二叉樹中兩節點的最低公共祖先
要求如下:
給定乙個頭節點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...