我正在尝试打印这棵树:
1
/ \
2 3
/ / \
4 5 6
这样:
1
2 3
4 5 6
我写了这段代码:
void print_g(Tree t)
{
Queue q=initQueue();
Tree tmp=initTree();
if(!isTreeEmpty(t))
enqueue(q,t);
while(!isQueueEmpty(q))
{
tmp=dequeue(q);
printf("%d ",*((int *)Root(tmp)));
if(!isTreeEmpty(subLeft(tmp)))
enqueue(q,subLeft(tmp));
if(!isTreeEmpty(subRight(tmp)))
enqueue(q,subRight(tmp));
}
}
但是这段代码的打印方式如下:
123456
我想不出如何解决打印问题的想法。 有人可以编写伪代码吗?
感谢。
答案 0 :(得分:1)
将子项添加到队列后,创建一个伪树节点,其值为换行符,并将其添加到队列中。
答案 1 :(得分:0)
在每一代树之后,您没有任何代码可以打印换行符('\ n')。
您需要找到一些方法告诉您的程序何时生成树,然后将'\ n'粘贴在那里。
也许:
void print_g(Tree t)
{
Queue q=initQueue();
Tree tmp=initTree();
if(!isTreeEmpty(t))
enqueue(q,t);
int dist = distanceFromTop(t); // new function to tell us which generation we are in
while(!isQueueEmpty(q))
{
tmp=dequeue(q);
if (distanceFromTop(tmp) != dist) // have we changed generation from previous iteration?
printf("\n"); // if so, newline
dist = distanceFromTop(tmp);
printf("%d ",*((int *)Root(tmp)));
if(!isTreeEmpty(subLeft(tmp)))
enqueue(q,subLeft(tmp));
if(!isTreeEmpty(subRight(tmp)))
enqueue(q,subRight(tmp));
}
}
请确保您的Tree
定义有一个成员来保持自己的distanceFromTop并在initTree()
期间填充此值以防止算法变得太慢。