![](/img/trans.png)
[英]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.