如何从最高到最低输出BST的节点值?
How to output the nodes' values of a BST from highest to lowest?
这是一个
我认为很容易的问题,但我发现我错了。我可以在没有递归的情况下完成程序,但我想问这个问题是否可以在递归版本中完成?
递归二叉搜索树遍历基本上是(伪代码,如果这是课程作业):
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
当然。假设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
}
相关文章:
- 比较C++中两个BST的节点
- 递归函数,用于计算 BST 中具有两个子节点的节点数
- 检查BST中每个节点的平衡因子并将其存储在节点中
- 删除BST节点:三重故障
- 如何在给定特定节点的BST中找到直接较大的元素
- 为什么我不能将从我的 BST 获取的这个节点推送到这个堆栈中?
- 在BST堆中删除节点免错误
- 如何结合findMin()和delete()来删除BST中的最小节点
- C bST删除节点会破坏排序算法
- 从BST删除节点时出错
- 在 BST 中插入节点时出现逻辑错误
- 递归地将 1 添加到 BST 中的所有节点,但具有最小数据的节点除外
- BST 节点删除 - 指针未正确删除
- 将节点插入 BST
- 删除BST中的节点
- 找到任何节点的BST高度
- 如何在BST中从最高到最低打印特定范围内的数字,访问的节点最少
- 从 BST 中删除唯一的节点
- 计算 BST 节点移除的时间复杂度
- 删除BST节点导致seg故障.处理步骤