当前位置: 首页 > 知识库问答 >
问题:

无法打印带缩进的二叉树

施兴言
2023-03-14

我有二叉查找树

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

我应该如何更改此代码

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

共有2个答案

拓拔俊艾
2023-03-14

您的问题在于缩进(我认为),解决方案是在递归时随身携带缩进。

  1. 将第二个参数添加bst_printvoid bst_print(bst_t*bst,int depth)(更纯,更普遍有用)或void bst_print(bt_t*bst、字符串缩进)(直接适用于打印)
  2. 每个子调用都应添加值:bst_print(bst-

彭鸿畅
2023-03-14

递归函数需要知道当前深度,以便它可以打印所需数量的空格。这可以通过向递归函数添加深度参数来完成。在递归调用中传递当前深度加 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);
}
 类似资料:
  • 我一直在尝试从Node切换到Java,我想知道的一件事是如何以类似于Node显示的格式打印对象,例如二叉树。例如,我的二叉树初始化代码如下: 在节点中,此二叉树将显示如下: 然而在Java,当我做system.out.println(树); 输出->BinaryTree@4554617c 什么是打印我的BinaryTree的正确方法?什么是好方法?有没有一种方法可以用JSON格式打印树?

  • 我尝试在jade(Java代理开发框架)中编写代码来打印SMA中代理的二叉树。我想用origin算法打印树顺序遍历: 遍历左侧子树,即调用Inorder(left-subtree) 访问根。 遍历右侧子树,即调用Inorder(right-subtree) 而我的节点代理是: 在我的代理打印中,我使用作为扩展。用我的代码: 我不知道如何修复代码中的infini循环。谁能帮助我的详细算法而不是一般的

  • 问题内容: 如何在Java中打印二进制树,使输出类似于: 我的节点: 问题答案: 我已经创建了简单的二叉树打印机。你可以根据需要使用和修改它,但是仍然没有对其进行优化。我认为很多事情可以在这里得到改善;) 输出1: 输出2:

  • 我需要打印一个具有深度和从高到低的二叉搜索树,根据深度,在打印节点之前增加破折号的数量。树根用0破折号,她的树梢用1破折号……我可以打印没有破折号的树,但我不知道如何用破折号打印。我用的是C.对不起我的英语不好

  • 我试图打印二叉树的所有路径(根到叶的路径),但没有效果。 我的策略是使用递归,基本情况是树为None或树节点为leaf return,否则,遍历树的左侧和右侧。 但我找不到同时保留左右树的方法。

  • NowCoder 题目描述 和上题几乎一样。 解题思路 // java ArrayList<arraylist> Print(TreeNode pRoot) { ArrayList<arraylist> ret = new ArrayList<>(); Queue queue = new LinkedList<>(); queue.add(pRoot); while