在C中打印简单的二进制搜索树

问题描述 投票:2回答:2

我只是用C实现简单的二进制搜索树。

struct node_struct {
    int data;
    struct node_struct *right, *left;
};

typedef struct node_struct Node;

具有已经起作用的插入,删除和搜索功能。

但是我还需要实现以这种方式将树打印出来的打印功能

6
|-2
  |-1
  |-4
|-9

从节点6上方开始,左边2个,右边9个,节点2左边1个,右边4个。

所以我想问一下如何实现此打印功能。

c printing binary-tree binary-search-tree
2个回答
0
投票

您可以使用Tree traversal技术来制作Tree traversal

预订(NLR)

  1. 访问当前节点的数据部分。

  2. 通过递归调用前置函数遍历左子树。

  3. 通过递归调用预排序函数遍历右侧子树。

保留当前级别的计数以打印缩进。例如:

Pre-order

Pre-order

0
投票

递归地。试试这个。

#include <stdio.h>

struct node_struct
{
    int data;
    struct node_struct *right, *left;
};
typedef struct node_struct Node;

void treeprint(Node *root, int level)
{
        if (root == NULL)
                return;
        if (level > 0) {
                for (int i = 0; i < level - 1; i++)
                        printf("  ");
                printf("|-");
        }
        printf("%d\n", root->data);
        treeprint(root->left, level + 1);
        treeprint(root->right, level + 1);
}

int main(void)
{
        Node a, b, c, d, e, f;

        a.data = 6;
        a.left = &b;
        a.right = &c;

        b.data = 2;
        b.left = &d;
        b.right = &e;

        c.data = 9;
        c.left = NULL;
        c.right = NULL;

        d.data = 1;
        d.left = &f;
        d.right = NULL;

        e.data = 4;
        e.left = NULL;
        e.right = NULL;

        f.data = 8;
        f.left = NULL;
        f.right = NULL;

        treeprint(&a, 0);
}
© www.soinside.com 2019 - 2024. All rights reserved.