這是一個問題,我認爲這很容易,但我發現我錯了。我可以在不遞歸的情況下完成程序,但是我想問一下這個問題是否可以在遞歸版本中完成?如何將BST的節點值從最高位輸出到最低位?
0
A
回答
2
遞歸二叉樹遍歷基本上(如果僞代碼,這是課程):
def traverse (node):
if (node == NULL):
return
traverse (node.left)
doSomethingWith (node.payload)
traverse (node.right)
:
traverse (root)
這一切就是真的,只是任何你想做的事更換doSomethingWith()
(如打印)。
這將按照從左到右的順序進行遍歷,因此,如果您的BST按照左移意味着更低的順序進行排序,則只需調用兩個traverse
調用即可。
舉例來說,考慮下面的樹:
20
/\
10 25
/ /\
5 24 27
/ /
2 28
體現在這個例子中的C程序:
#include <stdio.h>
typedef struct s {
int payload;
int left;
int right;
} tNode;
tNode node[] = { // Trust me, this is the tree from above :-)
{20, 1, 4}, {10, 2, -1}, { 5, 3, -1}, { 2, -1, -1},
{25, 5, 6}, {24, -1, -1}, {27, -1, 7}, {28, -1, -1}};
static void traverse (int idx) {
if (idx == -1) return;
traverse (node[idx].right);
printf ("%d ", node[idx].payload);
traverse (node[idx].left);
}
int main (void) {
traverse (0);
putchar ('\n');
return 0;
}
運行該程序爲您提供了以下的輸出:
28 27 25 24 20 10 5 2
0
當然。假設BST進行排序,使得「大於」節點是在右邊,「小於」的節點是在左邊,這樣的遞歸函數將工作:
void recurse(Node* node)
{
if (node == nullptr) return;
recurse(node->right); // Explore all the "greater than" nodes first
std::cout << node->value << std::endl; // Then print the value
recurse(node->left); // Then explore "less than" nodes
}
相關問題
- 1. 4函數找到最低位/最高位和值
- 2. 如何打印BST中的特定範圍內的數字,從最高到最低訪問最少的節點?
- 3. 從四分位數值計算最低10%和最高10%
- 4. sql order by從最高到最低值
- 5. MySQL - 訂單子串數位從最低到最高
- 6. java排列從最低到最高的輸入值
- 7. 在一列的間隔內找出最高值和最低值的位置?
- 8. 如何使用Python將k-Means集羣標籤從最高位置設置到最低位置?
- 9. 如何將此Python程序的結果從最低值排序到最高值?
- 10. tfidf輸出的TfidfVectorizer輸出(從最低到最高,反之亦然)
- 11. 最高值和最低值
- 12. 最高到最低
- 13. 如何根據用戶輸入將從字典中的值從最高值降到最低值
- 14. 找到最低設置位
- 15. Math.max和Math.min輸出允許的最高和最低值
- 16. 如何使用XPath計算最高值節點和最低值節點之間的差異?
- 17. 銫 - 如何計算點擊位置周圍指定區域的最高點,最低點,平均海拔高度?
- 18. 從PHP中最高有效位和最低有效位計算小數
- 19. mysql按從最高值到最低值的順序顯示行
- 20. Java - 通過arraylist並輸出最高到最低的數字?
- 21. 組織數量從最高到最低
- 22. PHP排序JSON從最高到最低
- 23. 找到所有高值的最低值
- 24. 如何將最後(最低)0位設置爲1
- 25. 顯示最高和最低的輸入
- 26. 如何找到最高有效位(MSB)
- 27. 決勝局列出從最高到最低的項目得分
- 28. 如何確定用戶輸入的輸入中的最高和最低值?
- 29. 從最低到最高排序用戶輸入
- 30. 在SQL如何找到最低和最高值
@Roger,反向中序遍歷,就像我所說的那樣,交換遍歷調用。或者你有最高和最低的其他定義?如果是這樣,您需要與我們分享這些信息。 – paxdiablo
我以前用過這個方法,但是我不能得到正確的訂單 –
@Roger,那代碼肯定會產生反向排序的節點。這是你想要的順序嗎? – paxdiablo