1. 程式人生 > >二叉樹順序儲存實現遍歷

二叉樹順序儲存實現遍歷

一、對於完全二叉樹可以將其資料元素逐層存放到一組連續的儲存單元中,用一維陣列作為儲存結構,對於編號為i的結點,其左孩子為2i,右孩子為2i+1.
二、實現程式碼及驗證主函式
演算法思想:遍歷演算法的核心任然是遍歷,所想得到的結果是一個輸出序列,將該輸出序列置於一個數組中,再按該序列輸出二叉樹。二叉樹按順序儲存與一維陣列中,下標從1開始,演算法的形參為下標的值,

#include<stdio.h>
#include<stdlib.h>
#define DataType char
#define N 12//N為總結點個數 
int a[N],i=0;//全域性變數a[N]用於存放先序遍歷所得到的二叉樹輸出序列(順序儲存) 
int b[N],j=0; int c[N],k=0; void PreOrder(int tree) { while(tree<=N){ a[i++]=tree; PreOrder(2*tree); PreOrder(2*tree+1); tree=N+1;//跳出迴圈 } } void InOrder(int tree) { while(tree<=N){ InOrder(2*tree); b[j++]=tree; InOrder(2*tree+1); tree=N+1; } } void
PostOrder(int tree) { while(tree<=N){ PostOrder(2*tree); PostOrder(2*tree+1); c[k++]=tree; tree=N+1; } } int main() { char Bitree[N+1]=" ABCDEFGHIJKL";//下標從1開始儲存,即該二叉樹按順序儲存,第一個元素下標為1 int i; PreOrder(1); printf("先序遍歷二叉樹為:\n"); for(i=0;i<N;i++) { printf
("%c ",Bitree[a[i]]); } printf("\n"); InOrder(1); printf("中序遍歷二叉樹為:\n"); for(i=0;i<N;i++) { printf("%c ",Bitree[b[i]]); } printf("\n"); PostOrder(1); printf("後序遍歷二叉樹為:\n"); for(i=0;i<N;i++) { printf("%c ",Bitree[c[i]]); } return 0; }