C++ 如何输出节点';从最高到最低的BST值?

C++ 如何输出节点';从最高到最低的BST值?,c++,binary-search-tree,C++,Binary Search Tree,这是一个我认为很容易的问题,但我发现我在最后一个问题上错了。我可以在没有递归的情况下完成程序,但我想问这个问题是否可以在递归版本中完成 递归二进制搜索树遍历基本上是(如果这是课程,则为伪代码): 这就是它真正的全部,只需将doSomethingWith()替换为您想做的任何事情(例如打印) 这将按照从左到右的顺序进行遍历,因此,如果您的BST的顺序是“左”意味着“低”,只需在两个遍历调用之间进行交换即可 例如,考虑下面的树: 20 / \ 10 25

这是一个我认为很容易的问题,但我发现我在最后一个问题上错了。我可以在没有递归的情况下完成程序,但我想问这个问题是否可以在递归版本中完成

递归二进制搜索树遍历基本上是(如果这是课程,则为伪代码):

这就是它真正的全部,只需将
doSomethingWith()
替换为您想做的任何事情(例如打印)

这将按照从左到右的顺序进行遍历,因此,如果您的BST的顺序是“左”意味着“低”,只需在两个
遍历
调用之间进行交换即可

例如,考虑下面的树:

       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;
}

当然。假设对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
}
void递归(节点*Node)
{
if(node==nullptr)返回;
递归(节点->右);//首先浏览所有“大于”节点
std::cout value left);//然后探索“小于”节点
}

@Roger,对于逆序遍历,您只需交换遍历调用,如我所述。或者你对最高和最低有其他的定义吗?如果是这样,你需要与我们分享这些信息。我以前使用过这种方法,但我无法得到正确的答案order@Roger,该代码肯定会生成反向排序的节点。这是你要的订单吗?对不起,方法是对的。在上一次编程中,我自己在程序中出错了。对不起,这个方法是正确的。在上一次编程中,我自己在程序中出错了。谢谢。
28 27 25 24 20 10 5 2
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
}