【问题标题】:Print Binary Search Tree Inorder [closed]打印二叉搜索树中序[关闭]
【发布时间】:2016-03-29 17:50:21
【问题描述】:

期望的行为

使用额外的选项卡打印每个级别的 BST,如下所示:

        level1
               level2
level0
               level2
        level1
               level2

实际行为

        level1
                     level2
level0
               level2
        level1
                     level2

这是我当前的代码,我似乎无法弄清楚我哪里出错了:

 void AVLTree::printHelp(Node * node)
    {
        if (node == 0) {
            return;
        }   
        printHelp(node->left);

        indent = "";
        for (size_t i = 1; i < calculateHeight(node); i++)
        {
            indent += "     ";
        }

        cout << '\n' << indent << node->value;
        printHelp(node->right);

    }

【问题讨论】:

  • 所有变量的值是多少?
  • indent 只是一个空字符串,我用来不断添加空格以显示节点的级别
  • 什么是left、value和node?另外,printHelp() 有什么作用?
  • 您能否也显示您发布的代码打印的是什么?
  • @RookieProgrammer 实际上没有足够的上下文来诊断您的问题。请在您的问题中发布minimal reproducible example

标签: c++ printing traversal inorder


【解决方案1】:

你的代码至少有两个问题:

  1. 要查看树,您需要将头向左倾斜。因此,您应该递归地首先打印 right 子节点,然后是节点,然后是 left 子节点。

  2. 通过重新计算缩进的节点高度,您可以平衡此操作的复杂性。

试试这样的:

#include <string>

void AVLTree::printHelp(const Node *const node, size_t height)
{
    if (node == 0) {
        return;
    }   

    printHelp(node->right, height + 1);
    cout << string(height, ' ')  << node->value << endl;
    printHelp(node->left, height + 1);
}

调用它

printHelp(root, 0);

【讨论】:

  • 感谢您的回复!但是输出现在显示为一堆带有问号的框,后跟节点值。
  • @RookieProgrammer 没错,我把参数的顺序弄乱了string。试试修正后的版本。
  • 它现在显示 50 作为根节点,然后在下一级显示 30,然后是 40 & 20,然后是 45&10。我开始怀疑我的插入功能了。
  • 尝试只打印出根和它的两个直系孩子,没有任何花哨的东西。有可能你确实建错了树。
  • @RookieProgrammer 这就是为什么你应该在第一名发布你的代码的minimal reproducible example。正如你的问题完全是题外话。
猜你喜欢
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多