二叉樹結點公共祖先 O(logn)求解》

2021-08-05 23:30:16 字數 772 閱讀 2003

乙個順序儲存的完全二叉樹:1

/     \

2         3

/   \     /    \

4       5  6      7

...任意給定兩結點的編號,求兩結點最近的公共祖先。

input

每組資料一行,為空格隔開的兩個數i和j,皆為32位有符號正整數

output

每組資料對應一行,為編號為i和j的結點的最近公共祖先的編號

sample input

4 5

4 7

sample output

2

1

hint

完全二叉樹,思路很簡單,我們先讓大的數向小的數靠攏,一直減小到兩個數在樹的同一層

然後兩個數一起往上找祖先,找到相同的就退出迴圈,因為任意兩個數的最遠的祖先一定是1,所以不用擔心找不到死迴圈的可能

#include #include #include #include #include #include #include #include #include #include const double eps=1e-8;

const double pi=acos(-1.0);

using namespace std;

int main()

while(m!=n)

printf("%d\n",n);

}return 0;

}

ACM A 二叉樹結點公共祖先

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

求二叉樹某個結點的祖先

考試做到這一題,當時寫的很亂,這讓我很煩,題目就是在二叉樹查詢某個值的結點,如果找到則輸出該節點的所有祖先,那我當時想到的就是用後序遍歷的非遞迴演算法,如果找到的話,棧中的所有元素就是該節點的祖先,不過後序遍歷的話需要用乙個標記記錄棧頂元素,第一次訪問棧頂的元素的時候不出棧,第二次訪問棧頂元素的時候...

尋找二叉樹公共祖先結點遞迴實現

definition for a binary tree node.struct treenode 尋找公共祖先結點lca演算法de思想 第零種情況 root為null時直接return 第一種情況 如果p在左子樹q在右子樹或反之則root為lca 第二種情況 p和q均在左子樹 lca遞迴左子樹 第...