二叉樹的最近公共祖先

2021-10-20 02:09:38 字數 1247 閱讀 6136

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

例如,給定如下二叉樹:  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。因為根據定義最近公共祖先節點可以為節點本身。

/**

* definition for a binary tree node.

* struct treenode ;

*/// 分三種情況:1 p,q 同屬於左樹;

// p,q 同屬於右樹;

// p,q 分別屬於乙個節點的左樹和右樹;

//演算法的整體思路:如果p q 兩個節點同屬於乙個節點的左樹或者右數;呈現p是q的子節點,那麼最近的公共祖先就是節點q;

//如果p q 兩個節點f分別屬於乙個節點的左樹或者右樹,那麼這個節點的最近公共祖先。

bool findnode(struct treenode *root,struct treenode *n) //查詢與根節點相同的節點;這裡的根節點指的是每次遞迴呼叫輸入的樹的根節點;

struct treenode* lowestcommonancestor(struct treenode* root, struct treenode* p, struct treenode* q)

else

if(findnode(root->left,q))//檢視q是否在左樹

else

if(pinleft&&qinleft)//同屬於左樹

return lowestcommonancestor(root->left,p,q);

if(qinright &&pinright)//同屬於右樹

return lowestcommonancestor(root->right,p,q);

//屬於乙個節點的左右樹

return root;

}

二叉樹的最近公共祖先

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