首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能打印带有缩进的二叉树

问不能打印带有缩进的二叉树
EN

Stack Overflow用户
提问于 2019-11-01 13:49:48
回答 2查看 246关注 0票数 0

我有二叉树

代码语言:javascript
复制
        c
    b      d
a             e
                  f

我想打印

代码语言:javascript
复制
c
  b
    a
  d
    e
      f

没有保存每个节点的深度。我试过:

代码语言:javascript
复制
typedef struct _bst_t 
{
    char word[MAX_WORD_LEN];
    struct _bst_t *left;
    struct _bst_t *right;
} bst_t;

    void bst_print(bst_t *bst)
    {
        if (bst != NULL)
        {
            printf("%s\n", bst->word);
            printf(" ");
            if (bst->left != NULL)
                bst_print(bst->left);
            if(bst->right != NULL)
                bst_print(bst->right);
        }
    }

我应该如何更改这段代码?

噢。对不起,没有提供每个节点的深度。我应该建立一个新的函数来获取每个节点的深度吗??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-01 14:02:51

递归函数需要知道当前深度,这样它就可以打印所需的空格数。这可以通过向递归函数中添加一个depth参数来实现。在递归调用中传递当前深度加1。

为了避免向主bst_print函数添加额外的参数,可以将递归部分移动到辅助函数中,最初将额外的参数设置为0。

代码语言:javascript
复制
void bst_print_(bst_t *bst, unsigned int depth)
{
    if (bst != NULL)
    {
        for (unsigned int i = 0; i < depth; i++)
            printf(" ");
        printf("%s (%d)\n", bst->word, bst->count);
        if (bst->left != NULL)
            bst_print_(bst->left, depth + 1);
        if(bst->right != NULL)
            bst_print_(bst->right, depth + 1);
    }
}

void bst_print(bst_t *bst)
{
    bst_print_(bst, 0);
}
票数 2
EN

Stack Overflow用户

发布于 2019-11-01 14:02:05

你的问题是压痕(我想),解决办法是在你回溯时带着缩进。

  1. 向bst_print添加第二个参数。无论是printing).
  2. Each子调用( void bst_print(bst_t *bst, int depth) )(更纯净,更普遍有用)还是void bst_print(bst_t *bst, string indent) (直接适用于void bst_print(bst_t *bst, int depth)子调用)都应该增加值:bst_print(bst->left, depth+1);

。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58660340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档