繁体   English   中英

树遍历(preorder,inorder,postorder)打印结果变化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM