【发布时间】:2014-02-24 05:59:57
【问题描述】:
我想以树格式打印我的 BST 的内容,例如:
我当前的打印输出:
10 -> 20 -> 30 -> 40 -> 60 -> 80 -> 90 ->
我希望它是什么样的:
40
/\
/ \
20 60
/ \ \
10 30 80
\
90
我尝试做一些 gotoxy,但由于某种原因,我无法让它像树一样打印,但我认为我需要做的不仅仅是 gotoxy。此外,“\”并不是真正必要的,只是一个不会让你们感到困惑的附加功能。
代码如下:
结构:
struct btnode
{
int value;
struct btnode *l;
struct btnode *r;
}*root = NULL, *temp = NULL, *t2, *t1;
打印:
void inorder(struct btnode *t)
{
if (root == NULL)
{
printf("No elements in a tree to display");
return;
}
if (t->l != NULL)
inorder(t->l);
printf("%d -> ", t->value);
if (t->r != NULL)
inorder(t->r);
}
我在树打印方面的尝试:
void print(struct btnode *t, int x, int i, int y)
{
i = i / 2 + 2;
if (root == NULL)
{
printf("No elements in a tree to display");
return;
}
if (t->l != NULL){
print(t->l, (x + i), i, (y + 1));
}
if (t->r != NULL){
print(t->r, (x + i), i, (y + 1));
}
gotoxy(x, y * 2);
printf("%d -> ", t->value);
}
关于如何根据我当前的输出代码实现树输出的任何想法,尽管我认为我需要做更多的 if 和 else 来将它变成一棵树。任何有帮助的东西,指南或想法都会非常感激。
谢谢
【问题讨论】:
-
尝试先水平打印树,这样更容易。将缩进级别的信息传递给
print函数,当然,打印缩进并以换行符结束打印格式。此外,打印应该发生在递归调用之间,而不是在它们之后。 -
如果将 35、41 和 50 添加到数据集中,您期望答案是什么样的。
-
@MOehm,这有什么帮助?假设你在“30”节点上,它不应该打印换行符,因为“60”还没有被处理。
-
@DwayneTowell:是的,没错。我现在编辑了评论,建议在尝试上面相当困难的格式之前先线性打印树并翻转。抱歉,我没有注意到 tres 被诅咒了,所以我错过了重点。
-
@MOehm 你介意为那个提供解决方案吗,所以我首先要做的是水平打印树并将该值传递给打印函数以转换为树?跨度>
标签: c data-structures tree binary-search-tree