有沒有辦法直接爬樹而不去拜訪其他分支? 例如,如果我有11號,我必須訪問它去2到5,而不是11沒有任何搜索。「攀登」二叉樹
0
/ \
/ \
/ \
1 2
/ \ / \
/ \ / \
3 4 5 6
/\ /\ /\ /\
/ \ / \ / \ / \
7 8 9 10 11 12 13 14
我已經殺了很多的時間我現在唯一的事情是,拿到第一道(1或2)數目爲N,你必須(N-1)/ 2,直到n等於(2-1)/ 2 =>(5-1)/ 2 => 2.(7-1)/ 2 =>(3-1)/ 2 => 1.((1-2) 11-1)/ 10 =>(2-1)/ 2 => 1. 但端那麼這將是正確切割根(0)和處理2像一個新的:
2
/\
/ \
/ \
5 6
/\ /\
/ \ / \
11 12 13 14
to
0
/\
/ \
/ \
1 2
/\ /\
/ \ / \
3 4 5 6
解:
int climb(int ID, Tree<int> t)
{
int time = 0;
if (tree.exists()) {
time += t.value();
tree t1, t2;
t.branches(t1, t2);
int branch = ID;
while (branch > 2) branch = (branch - 1)/2;
int offset = 1;
while (offset*2 < ID - 1) offset *= 2;
if (aux == 1) time += climb(ID - offset2/, a1);
if (aux == 2) time += climb(ID - offset, a2);
}
return time;
}
您可以訪問完整二叉樹的ANY(1,5,13等)元素。
我認爲你正在尋找的字是 '橫',而不是「爬」。此外,遞歸是解決方案的通常本質。 – sehe
通常遍歷搜索槽直到找到,我知道如何做到這一點,但我建議「爬山」只訪問那些正在路上的樹。 – user1021852
這取決於,你的樹是一棵完美的二叉樹(所有樹葉都在同一深度,每個父母都有兩個孩子)?節點的值是否與示例中一樣?如果兩個問題的答案都是肯定的,那麼你可以做你想做的事。如果不是,那麼你不能。 – pnezis