1676 二叉樹的最近公共祖先 IV

2021-10-18 18:13:33 字數 2252 閱讀 6588

題目描述:

給定一棵二叉樹的根節點 root 和 treenode 類物件的陣列(列表) nodes,返回 nodes 中所有節點的最近公共祖先(lca)。陣列(列表)中所有節點都存在於該二叉樹中,且二叉樹中所有節點的值都是互不相同的。

我們擴充套件二叉樹的最近公共祖先節點在維基百科上的定義:「對於任意合理的 i 值, n 個節點 p1 、 p2、…、 pn 在二叉樹 t 中的最近公共祖先節點是後代中包含所有節點 pi 的最深節點(我們允許乙個節點是其自身的後代)」。乙個節點 x 的後代節點是節點 x 到某一葉節點間的路徑中的節點 y

示例 1:

輸入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [4,7]

輸出: 2

解釋: 節點 4 和 7 的最近公共祖先是 2。

示例 2:

輸入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [1]

輸出: 1

解釋: 單個節點的最近公共祖先是該節點本身。

示例 3:

輸入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [7,6,2,4]

輸出: 5

解釋: 節點 7、6、2 和 4 的最近公共祖先節點是 5。

示例 4:

輸入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [0,1,2,3,4,5,6,7,8]

輸出: 3

解釋: 樹中所有節點的最近公共祖先是根節點。

樹中節點個數的範圍是 [1, 104] 。

-109 <= node.val <= 109

所有的 node.val 都是互不相同的。

所有的 nodes[i] 都存在於該樹中。

所有的 nodes[i] 都是互不相同的。

方法1:

(1)使用雜湊統計標識結點值;

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

if(st.

count

(root-

>val)

) treenode* node_left=

find_ancestor

(root-

>left,st)

; treenode* node_right=

find_ancestor

(root-

>right,st);if

(node_left!=

nullptr

&&node_right!=

nullptr

)return node_left!=

nullptr

?node_left:node_right;

//返回有結點值的結點

} treenode*

lowestcommonancestor

(treenode* root, vector

>

&nodes)

return

find_ancestor

(root,st);}

};

二叉樹的最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 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,...