最近公共祖先 python 二叉樹的最近公共祖先

2021-10-11 04:50:25 字數 1996 閱讀 2197

二叉樹的最近公共祖先

給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

例如,給定如下二叉樹: 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...