二叉樹的最近公共父節點
題目
求二叉樹兩個節點的最近公共父節點
思路
遞迴,邊界條件為空節點或兩個節點的其中一個
如果node的左節點是a,b的公共父節點,則在其右子樹中嘗試查詢a,b最後結果必然是NULL,反之亦然。
所以當node的左右節點查詢結果都不為空的時候,說明該點就是最近公共父節點。
程式碼
TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q){
if(!root||root==p||root==q)
return root;
TreeNode left = lowestCommonAncestor(root.left , p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if(left&&right)
return root;
if(!left)
return right;
if(!right)
return left;
}
相關推薦
二叉樹---最近公共父節點(LCA)
點子 clas urn com 祖先 ces 代碼 col 深度 題目: 給定一棵二叉樹,找到兩個節點的最近公共父節點(LCA)。 最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。 4 / 3 7 / 5 6 LCA
二叉樹最近公共父節點
在二叉樹中找最近公共父節點。分為兩種情況,一種是有父指標,一種沒有父指標。 1、有父指標 這種情況比較簡單,計算兩個結點的深度,再把深度大的向上移,移到同一深度。在同時向上移動,直到兩個結點相同,這樣
二叉樹最近公共父節點(記錄根到某一節點路徑)
題目:二叉樹的結點定義如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; };
二叉樹最近公共祖先
ret highlight 筆試 代碼 light brush 二叉 init blog 給定一棵二叉樹,找到兩個節點的最近公共父節點(LCA)。最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。 樣例:對於下面這棵二叉樹 4 / \3 7 / \ 5
二叉樹的公共父結點
題目描述: 1 / \ 2 3 &n
YTU_3309: Lorenzo Von Matterhorn(完全二叉樹 最近公共祖先)
3309: Lorenzo Von Matterhorn 時間限制: 1 Sec 記憶體限制: 128 MB 提交: 6 解決: 6 [提交][狀態][討論版][命題人:acm4302] 題目描述 Barney住在紐約。紐約市有無限數量的路口,路口為從1開始編號的正
程式設計師面試100題之十六 二叉樹中兩個節點的最近公共父節點
這個問題可以分為三種情況來考慮:情況一:root未知,但是每個節點都有parent指標此時可以分別從兩個節點開始,沿著parent指標走向根節點,得到兩個連結串列,然後求兩個連結串列的第一個公共節點,這個方法很簡單,不需要詳細解釋的。情況二:節點只有左、右指標,沒有parent
滿二叉排序樹任意三個節點最近公共父節點
#include <iostream> using namespace std; int tree[1024*1024]; int k; int a,b,c; int power2(int n) { int i=1; int j; fo
二叉樹的最近公共父節點
題目 求二叉樹兩個節點的最近公共父節點 思路 遞迴,邊界條件為空節點或兩個節點的其中一個 如果node的左節點是a,b的公共父節點,則在其右子樹中嘗試查詢a,b最後結果必然是NULL,反之亦然。 所以當node的左右節點查詢結果都不為空的時候,說明該點
資料結構演算法題/二叉樹中兩個節點的最近公共父節點
這個問題可以分為三種情況來考慮: 情況一:root未知,但是每個節點都有parent指標 此時可以分別從兩個節點開始,沿著parent指標走向根節點,得到兩個連結串列,然後求兩個連結串列的第一個公共節點,這個方法很簡單,不需要詳細解釋的。 情況二:節點只有左、右指標,沒有parent指標,roo
二叉樹中兩個節點的最近公共父節點
轉載:http://blog.csdn.net/hackbuteer1/article/details/8022138# 這個問題可以分為四種情況來考慮:情況一:root未知,但是每個節點都有parent指標此時可以分別從兩個節點開始,沿著parent指標走向根節點,得到兩
【資料結構】二叉樹中任意兩節點的最近公共祖先節點
問題要求:任意給出二叉樹中的兩個節點,求他們的最近祖先 分三種情況: 1、該二叉樹是搜尋二叉樹 如果兩個節點的值都大於根節點,則遍歷右子樹查詢一個處於兩節點之間的值為最近祖先,如果兩個節點的值都小於根節點,則遍歷左子樹查詢一個兩節點之間的值為最近祖先 插入程式碼 Node*
搜尋二叉樹中兩個節點的最近公共祖先
搜尋二叉樹中兩個節點的最近公共祖先 Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST. According to the
滿排序二叉樹任意三個節點最低公共父節點
#include <iostream> using namespace std; int tree[1024*1024]; int k; int a,b,c; int power2(int n) { int i=1; int j; fo
二叉樹中兩個節點的最低公共父節點
問題描述 構建一棵二叉樹(不一定是二叉查詢樹),求出該二叉樹中某兩個結點的最低公共父結點。借用一張圖如下: 最低公共父結點的思路 遞迴,首先從樹根開始考慮: ①結點A 和 結點B 要麼都在樹根的左子樹中;②要麼都在樹根的右子樹中;③要麼一個在左子樹中
求二叉樹中兩個節點的最近公共祖先(三叉鏈,搜尋樹,普通二叉樹)
求二叉樹中兩個節點的最近公共祖先。 要求:分別考慮以下三種情況 1、二叉樹每個節點有parent(三叉鏈) 2、二叉樹是搜尋二叉樹。 3、就是普通二
二叉樹中兩個節點的最近公共祖先(leetcode)
leetcode題目地址 二叉樹構造 TreeNode* t1 = new TreeNode(3); TreeNode* t2 = new TreeNode(5); TreeNode* t3 = new TreeNode(1);
求二叉樹中兩個節點的最近公共祖先結點
二叉樹是搜尋二叉樹 1、原理:二叉搜尋樹是排序過的 ,位於左子樹的結點都比父結點小,位於右子樹的結點都比父結點大,我們只需從根節點開始和兩個輸入的結點進行比較,如果當前節點的值比兩個結點的值都大,那麼最低的公共祖先結點一定在該結點的左子樹中,下一步開遍歷當前結點的左子樹。如
二叉樹問題——尋找二叉樹中兩個節點的最近公共祖先
此題大概分為3種情況: 1、節點中無parent,但提供了root (1)、此種情況又分為兩種,開闢空間,使用容器來儲存路徑,將其轉換為求連結串列公共節點的問題,時間複雜度為O(N),空間複雜度為O(N) (2)、不開闢空間,在節點的左右子樹上尋找兩個節點
求二叉樹中兩個節點的最近公共祖先節點
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<vector> using std::cin; using std::cout; usi