簡體   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