1
/ \2 3
/ \ / \
4 5 6 7
/\ /\ /\ /\
如上圖所示,由正整數 1, 2, 3, ...組成了一棵無限大的二叉樹。從某乙個結點到根結點(編號是1的結點)都有一條唯一的路徑,比如從5到根結點的路徑是(5, 2, 1),從4到根結點的路徑是(4, 2, 1),從根結點1到根結點的路徑上只包含乙個結點1,因此路徑就是(1)。對於兩個結點x和y,假設他們到根結點的路徑分別是(x1, x2, ... ,1)和(y1, y2,...,1),那麼必然存在兩個正整數i和j,使得從xi 和yj 開始,有xi = yj,xi + 1 = yj + 1,xi + 2 = yj + 2,...
現在的問題就是,給定x和y,要求他們的公共父節點,即xi(也就是 yj)。
輸入包含多組資料,每組資料報含兩個正整數x和y(1≤x, y≤2^31-1)。
對應每一組資料,輸出乙個正整數xi,即它們的首個公共父節點
在完全二叉樹中,乙個結點x
的父節點一定是x/2
,那麼兩個結點的公共結點就是不斷地找各自的父節點直到有相等的父節點
// write your code here cpp
#include using namespace std;
int main()
cout << a << endl;
}return 0;
}
求解二叉樹中兩個結點的最低公共父結點
一,問題描述 構建一棵二叉樹 不一定是二叉查詢樹 求出該二叉樹中某兩個結點的最低公共父結點。借用一張圖如下 結點8 和 結點5 的最低公共父結點為 結點2 二,二叉樹的構建 與 求二叉樹中第k層結點的個數 文章中的第二點 二叉樹構建相同 三,求解最低公共父結點的演算法實現 有兩種思路,一種是通過中序...
(演算法)二叉樹中兩個結點的最近公共父結點
二叉樹中兩個結點的最近公共父結點 二叉樹結點的定義如下 struct treenode 前面在劍指offer中出現了類似的題目,但要求的思路都不太一樣,請參考 這裡介紹一種複雜度較低的遞迴實現。如題我們要找的二叉樹中兩個結點的最近公共結點,如果我們從上往下遞迴,按照深度優先搜尋的方式。如果當前結點為...
二叉樹的任意兩個結點的最小公共父親結點
在這裡介紹兩種方法 中序法 後序法 1.後序法 主要利用的是後序遍歷的時候,棧裡面存放的是此時的這個結點的所有的父親結點,所以這個時候只要將兩個結點的父親序列都取出來,然後進行對齊,之後兩個指標同時移動,當指標所指向的內容相等的時候就找到了那個最小的公共父親結點 treenode lowestcom...