我只是用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个。
所以我想问一下如何实现此打印功能。
您可以使用Tree traversal
技术来制作Tree traversal
预订(NLR)
访问当前节点的数据部分。
通过递归调用前置函数遍历左子树。
通过递归调用预排序函数遍历右侧子树。
保留当前级别的计数以打印缩进。例如:
Pre-order
Pre-order
递归地。试试这个。
#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);
}