二叉樹的公共父結點

2021-09-08 07:03:10 字數 808 閱讀 3941

/ \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,即它們的首個公共父節點。
10 4
2
設子節點序號為x,因為題目給的這棵無限大的二叉樹是一棵完全二叉樹,所以其父節點序號為int(x/2)。

#include using namespace std;

int main()

//當x和y相等時,說明找到了它們的首個公共父結點

cout << x << endl;

}return 0;

}

二叉樹查詢結點及父結點

6 二叉樹查詢結點及父結點 5分 編寫程式在二叉樹中查詢給定結點及父結點。二叉樹結點的資料域值不等於0的整數。輸入第1行為一組用空格間隔的整數,表示帶空指標資訊的二叉樹先根序列,其中空指標用0表示。例如1 5 8 0 0 0 6 0 0表示如下圖的二叉樹。第2行為整數m,表示查詢個數。接下來m行,每...

二叉樹的公共父節點

void findparent node root,node pt1,node pt2 1 對於二叉搜尋樹,裡邊的元素都是排好序的,那麼從根節點向下搜尋,找到第乙個節點p滿足p data pt1 data 且 p data pt2 data 假定pt1 data pt2 data 即是滿足要求的公共...

ACM A 二叉樹結點公共祖先

乙個順序儲存的完全二叉樹 1 2 3 4 5 6 7 任意給定兩結點的編號,求兩結點最近的公共祖先。每組資料一行,為空格隔開的兩個數i和j,皆為32位有符號正整數 每組資料對應一行,為編號為i和j的結點的最近公共祖先的編號 4 5 4 7 2 1程式設計的時候注意考慮所有情況,要不可能一直在迴圈裡導...