第十一週項目1——二叉樹算法驗證(1) 層次遍歷算法驗證

問題:

[cpp] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. /*    
  2. * Copyright (c)2016,煙臺大學計算機與控制工程學院    
  3. * All rights reserved.    
  4. * 文件名稱:項目1.cpp    
  5. * 作    者:樑凱    
  6. * 完成日期:2016年11月16日    
  7. * 版 本 號:v1.0     
  8. *問題描述:實現二叉樹的層次遍歷算法,並對用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”創建的二叉樹進行測試。 
  9. *輸入描述:無    
  10. *程序輸出:測試數據    
  11. */      

頭文件btree.h以及其函數功能實現詳見二叉樹算法庫

代碼:

[cpp] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. #include <stdio.h>  
  2. #include "btree.h"  
  3.   
  4. void LevelOrder(BTNode *b)  
  5. {  
  6.     BTNode *p;  
  7.     BTNode *qu[MaxSize];    //定義環形隊列,存放節點指針  
  8.     int front,rear; //定義隊頭和隊尾指針  
  9.     front=rear=-1;      //置隊列爲空隊列  
  10.     rear++;  
  11.     qu[rear]=b;     //根節點指針進入隊列  
  12.     while (front!=rear) //隊列不爲空  
  13.     {  
  14.         front=(front+1)%MaxSize;  
  15.         p=qu[front];        //隊頭出隊列  
  16.         printf("%c ",p->data);  //訪問節點  
  17.         if (p->lchild!=NULL)    //有左孩子時將其進隊  
  18.         {  
  19.             rear=(rear+1)%MaxSize;  
  20.             qu[rear]=p->lchild;  
  21.         }  
  22.         if (p->rchild!=NULL)    //有右孩子時將其進隊  
  23.         {  
  24.             rear=(rear+1)%MaxSize;  
  25.             qu[rear]=p->rchild;  
  26.         }  
  27.     }  
  28. }  
  29.   
  30. int main()  
  31. {  
  32.     BTNode *b;  
  33.     CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");  
  34.     printf("二叉樹b: ");  
  35.     DispBTNode(b);  
  36.     printf("\n");  
  37.     printf("層次遍歷序列:\n");  
  38.     LevelOrder(b);  
  39.     DestroyBTNode(b);  
  40.     return 0;  
  41. }  
  42. 運行結果:


    知識點總結:

    利用隊列的知識,在循環判斷中,先訪問左孩子,再訪問右孩子,隊列特點先進先出


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章