[英]Why LEFT is always traversed before RIGHT in PreOrder, InOrder & PostOrder of Tree Traversal
[英]Tree traversal (preorder,inorder,postorder) print result change
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
void preorder(char tree[], int i)
{
if(tree[i] != '\0')
{
printf("%c", tree[i]);
preorder(tree, i*2);
preorder(tree, i*2+1);
}
}
void inorder(char tree[], int i)
{
if(tree[i] != '\0')
{
inorder(tree, i*2);
printf("%c", tree[i]);
inorder(tree, i*2+1);
}
}
void postorder(char tree[], int i)
{
if(tree[i] != '\0')
{
postorder(tree, i*2);
postorder(tree, i*2+1);
printf("%c", tree[i]);
}
}
void main()
{
char ArrayTree[36] = { 0,'A','B','C','D','E','F','G','H','I','J','K',0, };
printf("\n preorder : ");
preorder(ArrayTree, 1);
printf("\n inorder: ");
inorder(ArrayTree, 1);
printf("\n postorder: ");
postorder(ArrayTree, 1);
getchar();
}
当前打印结果
预购:ABDHIEJKCFG / 预购:HDIBJEKAFCG / 后购:HIDJKEBFGCA /
但我想这样打印
预购:ABDHEIJCFGK / 预购:HDBIEJAFCGK / 后购:HDIJEBFKGCA /
如何改变它?
代码看起来正确,但您的数据错误。 它不代表图表中的树。 例如, 'H'
的右兄弟应该是 0(或 NULL)。
校正后的数组如下所示:
char ArrayTree[32] = { 0,'A','B','C','D','E','F','G','H',0,'I','J',0,0,0,'K' };
大小只需为 32 即可包含高度为 5 的完整树(加上未使用的 0 索引)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.