树内容的格式化输出 - 前序遍历

Posted

技术标签:

【中文标题】树内容的格式化输出 - 前序遍历【英文标题】:Formatting output of tree contents - Preorder traversal 【发布时间】:2012-12-14 08:26:57 【问题描述】:

我有一个打印树内容的方法:

void RedBlackTree::printPreorder(RedBlackNode *root)
    if(root == NULL) 
        return;
    cout << root->data << endl;
    printInorder(root->left);
    printInorder(root->right);

我的树的内容读取正确,但我想格式化树以使其看起来更好。现在,对于一棵树:

    c
   / \
  b   k
 /   / \
a   d   m

内容打印:

c
b
a
k
d
m

但我想添加一些缩进,以便显示为:

c
    b
        a
    k
        d
        m

格式为:

Root
    Left 
        LeftLeft
        LeftRight
    Right
        RightLeft
        RightRight

etc....

我只是对递归有点迷失了。谢谢!

【问题讨论】:

您可以传递一个depth 变量,该变量在每次调用时递增,并打印等于depth 的空格数。请参阅此示例,它打印目录printdir.c ..您需要在c++ 中执行此操作。 【参考方案1】:
void RedBlackTree::printPreorder(RedBlackNode *root, int depth)
    if(root == NULL) 
        return;
    for(int i=0; i<=depth; i++)
      cout <<" ";

    depth++;
    cout << root->data << endl;
    printInorder(root->left, depth);
    printInorder(root->right, depth);
  

试试看!!

【讨论】:

欢迎!!...看看printdic.c ...因为更好的解决方案是可能的。 c++ 中必须有一些 %*s 等价物。

以上是关于树内容的格式化输出 - 前序遍历的主要内容,如果未能解决你的问题,请参考以下文章

二叉树输入前序遍历输出中序遍历

从根矩阵对 OBST 进行前序遍历

算法笔记 二叉树已知后序与中序输出前序[二叉树 前序遍历] HERODING的算法之路

小白学算法8.二叉树的遍历,前序中序和后序

二叉搜索树的前后序遍历序列

144. 二叉树的前序遍历简单树递归迭代