二叉樹的順序存儲


//二叉樹的順序存儲結構
#define
MAX_TREE_SIZE 100 typedef int TElemType; TElemType Nil=0;//設整型以0為空 typedef TElemType SqBiTree[MAX_TREE_SIZE];//0號單元存儲根結點

未完,寫作整理中。。。

 2018-11-14   22:19:09

二叉樹的性質:

1,在二叉樹的第i層上至多有2i-1個結點(i>=1)。

ps:歸納法易證。

2,深度為k的二叉樹至多有2k-1個結點(k>=1)。

3,n0=n2+1

4,具有n個結點的完全二叉樹的深度為[log2n](down)+1 

 二叉樹的基本操作:

 

 

 

/*初始化樹*/

 

 1 int InitBiTree(SqBiTree T)
 2 {
 3     int i;
 4     for(i=0;i<MAX_TREE_SIZE;i++)
 5     {
 6         T[i]=Nil;
 7     }
 8     T[MAX_TREE_SIZE]='\0';    //給數組尾部加上結束標志
 9     return OK;
10 }

 

 

 

/*創建樹*/

 1 int CreateBiTree(SqBiTree T)
 2 {
 3     int i=0;
 4     int l=0;
 5     char s[MAX_TREE_SIZE];
 6     printf("請按順序輸入結點的值,空格表示空結點,結點數<=%d\n",MAX_TREE_SIZE);
 7     gets(s);
 8     l=strlen(s);//strlen("hello")返回的結果是5,是不包含字符串結尾處的‘\0’,
 9                 //但是strcpy(str1,str2),會拷貝str2中的‘\0’。
10     for(;i<l;i++)
11     {
12         T[i]=s[i];
13         if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil)
14         {
15             printf("出現無雙親且不是根的結點.\n");
16             return ERROR;
17         }
18     }
19     /*for(;i<MAX_TREE_SIZE;i++)
20     {
21         T[i]=Nil;
22     }*/
23     return OK;
24 }

 

/*計算樹的深度*/

/*判斷樹是否為空*/

BT數組中的下標與二叉樹節點按層次遍歷編號 如圖:

 

根節點與左右子樹的編號規律:

 

參考資料:https://www.cnblogs.com/zlspace/p/6831293.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM