2016-03-29 94 views
1

我想打印我的BST,使得它打印这样的:打印二叉搜索树中序与缩进

 50, 11 
       45,72 
40,12 
       30,16 
     20,16 
       10,54 

我的代码不会做,我怎么会喜欢,但在这里它是:

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

    } 
+0

什么是所有变量的值调用此? –

+0

indent只是一个空字符串,我用它来保持添加空格以显示节点的级别 – RookieProgrammer

+0

剩下的是什么,值和节点?另外,printHelp()是做什么的? –

回答

1

至少有两个问题与您的代码:

  1. 要查看树,你需要倾斜你的头离开了。因此,你应该递归地首先打印正确的子,然后该节点,然后孩子。

  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); 
+0

感谢您的回应!但是输出现在显示为一堆带有问号的框,后面跟着节点值。 – RookieProgrammer

+0

@RookieProgrammer真的,我混淆了参数的顺序到'string'。尝试更正的版本。 –

+0

它现在显示50作为根节点,然后在下一级显示30,然后显示40和20,然后显示45和10。我开始怀疑我的插入功能。 – RookieProgrammer