資料結構–二叉樹–獲得二叉樹的深度和根(順序結構)

來源:互聯網
上載者:User
//二叉樹的順序儲存表示#define MAX_TREE_SIZE 100//二叉樹最大節點數typedef TElemType SqBiTree[MAX_TREE_SIZE]//0號單中繼存放區根節點SqBiTree bt;

順序儲存結構:用一組地址連續的儲存單元依次自上而下、自左而右儲存完全二叉樹上的結點元素,即將完全二叉樹上編號為i的結點元素儲存在定義為一維數組中下標為i-1的分量中。這種儲存結構僅適用於完全二叉樹。

#include<stdio.h> /* EOF(=^Z或F6),NULL */#include<math.h> /* floor(),ceil(),abs() */#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status; /* Status是函數的類型,其值是函數結果狀態碼,如OK等 */#if CHARtypedef char TElemType;  TElemType Nil=' '; /* 設字元型以空格符為空白 */#else  typedef int TElemType;  TElemType Nil=0; /* 設整型以0為空白 */#endif#define MAX_TREE_SIZE 100 /* 二叉樹的最大結點數 */typedef TElemType SqBiTree[MAX_TREE_SIZE]; /* 0號單中繼存放區根結點 */Status InitBiTree(SqBiTree T){ /* 構造空二叉樹T。因為T是固定數組,不會改變,故不需要& */  int i;  for(i=0;i<MAX_TREE_SIZE;i++)    T[i]=Nil; /* 初值為空白 */  return OK;}Status CreateBiTree(SqBiTree T){ /* 按層序次序輸入二叉樹中結點的值(字元型或整型), 構造順序儲存的二叉樹T */  int i=0;#if CHAR  int l;  char s[MAX_TREE_SIZE];  printf("請按層序輸入結點的值(字元),空格表示空結點,結點數≤%d:\n",MAX_TREE_SIZE);  gets(s); /* 輸入字串 */  l=strlen(s); /* 求字串的長度 */  for(;i<l;i++) /* 將字串賦值給T */  {    T[i]=s[i];    if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil) /* 此結點(不空)無雙親且不是根 */    {      printf("出現無雙親的非根結點%c\n",T[i]);      exit(ERROR);    }  }  for(i=l;i<MAX_TREE_SIZE;i++) /* 將空賦值給T的後面的結點 */    T[i]=Nil;#else  printf("請按層序輸入結點的值(整型),0表示空結點,輸999結束。結點數≤%d:\n",MAX_TREE_SIZE);  while(1)  {    scanf("%d",&T[i]);    if(T[i]==999)      break;    if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil) /* 此結點(不空)無雙親且不是根 */    {      printf("出現無雙親的非根結點%d\n",T[i]);      exit(ERROR);    }    i++;  }  while(i<MAX_TREE_SIZE)  {    T[i]=Nil; /* 將空賦值給T的後面的結點 */    i++;  }#endif  return OK;}Status BiTreeEmpty(SqBiTree T){ /* 初始條件: 二叉樹T存在 */  /* 操作結果: 若T為空白二叉樹,則返回TRUE,否則FALSE */  if(T[0]==Nil) /* 根結點為空白,則樹空 */    return TRUE;  else    return FALSE;}int BiTreeDepth(SqBiTree T){ /* 初始條件: 二叉樹T存在。操作結果: 返回T的深度 */  int i,j=-1;  for(i=MAX_TREE_SIZE-1;i>=0;i--) /* 找到最後一個結點 */    if(T[i]!=Nil)      break;  i++; /* 為了便於計算 */  do    j++;  while(i>=pow(2,j));//計算2的J次冪,返回double值。因為i<=pow(2,j)-1,因此i<pow(2,j).  return j;//返回二叉樹的深度}Status Root(SqBiTree T,TElemType *e){ /* 初始條件: 二叉樹T存在 */  /* 操作結果:  當T不空,用e返回T的根,返回OK;否則返回ERROR,e無定義 */  if(BiTreeEmpty(T)) /* T空 */    return ERROR;  else  {    *e=T[0];//返回T的根,也就是第一個節點    return OK;  }}void main(){   Status i;   TElemType e;   SqBiTree T;   InitBiTree(T);   CreateBiTree(T);   printf("建立二叉樹後,樹空否?%d(1:是 0:否) 樹的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T));   i=Root(T,&e);   if(i)      printf("二叉樹的根為:%d\n",e);   else      printf("樹空,無根\n");}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.