一,問題描述
請構造一棵二叉查詢樹,並給定兩個結點,請找出這兩個結點的最低公共祖先結點。
這裡假設二叉查詢樹中的結點的權值儲存是整型數字(見**中的binarynode內部類),最低公共祖先結點如下:結點5 和 結點12 的最低公共祖先結點是結點10
二,實現思路
假設給定的兩個結點的權值分別為 node1 和 node2
如果根的權值處於 node1 和 node2 之間,則根就是它們的最低公共祖先結點
如果根的權值比 node1 和 node2 都大,則它們的最低公共祖先結點在根的左子樹中
如果根的權值比 node1 和 node2 都小,則它們的最低公共祖先結點在根的右子樹中
因此,這可以用遞迴來實現。
三,**實現
首先得構造一棵二叉查詢樹。具體構造可參考:二叉樹的構造
構造好之後,呼叫lowestcommonparentnode方法即可找出最低公共祖先結點的權值。
public四,參考資料求解二叉樹中兩個結點的最低公共父結點class lowcommonnode
}private binarynode root;
private
void buildtree(int arr)
}private
void insert(int ele)
private binarynode insert(binarynode root, int ele)
/*** 求解二叉查詢樹中 node1 和 node2 代表的節點的 最低公共祖先結點
* 首先讓node1總是代表權值較小的那個結點.
* 對於二叉查詢樹而言:
* 如果根的權值處於 node1 和 node2 之間,則根就是它們的最低公共祖先結點
* 如果根的權值比 node1 和 node2 都大,則它們的最低公共祖先結點在根的左子樹中
* 如果根的權值比 node1 和 node2 都小,則它們的最低公共祖先結點在根的右子樹中
*/public
int lowestcommonparentnode(binarynode root, int node1, int node2)
assert node1 < node2;
if(root == null)
throw
new illegalargumentexception(" neither node1 nor node2 contains in binary search tree ");
if(root.ele > node1 && root.ele < node2)
return root.ele;
if(root.ele > node1 && root.ele > node2)//
if(root.ele > node2)
//在左子樹中查詢最低公共祖先結點
return lowestcommonparentnode(root.left, node1, node2);
else
< node1
//在右子樹中查詢最低公共祖先結點
return lowestcommonparentnode(root.right, node1, node2);}//
hapjin test
public
static
void main(string args) ;
lcn.buildtree(arr);//
build a binary search tree
//node1 and node2 should exist in arr,or will throw illegalargumentexception
int node1 = 5;
int node2 = 12;
//should build tree before invoke lowestcommonparentnode
system.out.println(lcn.lowestcommonparentnode(lcn.root, node1, node2));}}
二叉樹的構造
235 二叉樹最低公共祖先
給定乙個二叉搜尋樹,找到該樹中兩個指定節點的最近公共祖先。最近公共祖先的定義為 對於有根樹 t 的兩個結點 p q,最近公共祖先表示為乙個結點 x,滿足 x 是 p q 的祖先且 x 的深度盡可能大 乙個節點也可以是它自己的祖先 例如,給定如下二叉搜尋樹 root 6,2,8,0,4,7,9,nul...
二叉排序樹的最低公共祖先
接著上面一篇文章。那麼如果該二叉樹是bst呢?可以利用bst的性質。這題也假設這兩個節點同時存在。從根結點出發,沿著兩個給定結點的公共祖先前進。當這兩個結點的值同時小於當前結點的值時,沿當前結點的左指標前進 當這兩個結點的值同時大於當前結點的 值時,沿當前結點的右指標前進 當第一次遇到當前結點的值介...
二叉樹中兩節點的最低公共祖先
二叉樹中兩節點的最低公共祖先 要求如下 給定乙個頭節點head 和另外兩個節點 a b 返回 a 和 b 的最低公共祖先 和思路如下 package beginner.tree 給定乙個頭節點head 和另外兩個節點 a b 返回 a 和 b 的最低公共祖先 auther 蘇察哈爾丶燦 date 2...