二叉樹的最近公共祖先
給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。
例如,給定如下二叉樹: 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,8,null,null,7,4], p = 5, q = 4
輸出: 5
解釋: 節點 5 和節點 4 的最近公共祖先是節點 5。因為根據定義最近公共祖先節點可以為節點本身。
說明:所有節點的值都是唯一的。
p、q 為不同節點且均存在於給定的二叉樹中。
解答方法1
分為以下幾個步驟:
找到從根到p指向結點的路徑,並儲存在乙個向量或陣列中;
找到從根到q指向結點的路徑,並儲存在乙個向量或陣列中;
同時從這兩條路徑起點開始走,直到遇到乙個不同的節點,則它前面的那個即為p,q的最近公共祖先。
c++**
* definition for a binary tree node.
* struct treenode
class solution
class solution {
public:
treenode* recursion(treenode* root,treenode* p,treenode* q)
if(!root) return nullptr;
if(root == p) return p;
if(root == q) return q;
treenode* lp = recursion(root->left,p,q);
treenode* rp = recursion(root->right,p,q);
if(!lp) return rp;
if(!rp) return lp;
return root;
treenode* lowestcommonancestor(treenode* root, treenode* p, treenode* q) {
return recursion(root,p,q);
python**
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution:
def recursion(self,root: treenode,p: treenode,q: treenode) -> treenode:
if not root:
return none
if root == p:
return p
if root == q:
return q
l = self.recursion(root.left,p,q)
r = self.recursion(root.right,p,q)
if not l and not r:
return none
if not l:
return r
if not r:
return l
return root
def lowestcommonancestor(self, root: 'treenode', p: 'treenode', q: 'treenode') -> 'treenode':
return self.recursion(root,p,q)
標籤:treenode,祖先,self,二叉樹,公共,return,path,root,節點
二叉樹的最近公共祖先 二叉樹
給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 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 的最近公共祖先是節點 ...
二叉樹的最近公共祖先
給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 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...