gpt4 book ai didi

无法打印带缩进的二叉树

转载 作者:太空宇宙 更新时间:2023-11-04 06:45:20 24 4
gpt4 key购买 nike

我有二叉搜索树

        c
b d
a e
f

我要打印

c
b
a
d
e
f

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

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

我应该如何更改此代码?

哦。抱歉,没有提供每个节点的深度。我应该创建一个新函数来获取每个节点的深度吗??

最佳答案

递归函数需要知道当前深度,以便打印所需的空格数。这可以通过向递归函数添加 depth 参数来完成。在递归调用中将当前深度加 1。

为避免向主 bst_print 函数添加额外参数,可以将递归部分移至辅助函数,并将额外参数初始设置为 0。

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

关于无法打印带缩进的二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58660340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com