• 二叉树层序遍历的实现


    我们可以很容易的使用队列来实现二叉树的层序遍历,代码如下:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #define MAX  10
     4 
     5 
     6 //二叉树存储结构定义
     7 typedef char Item;
     8 typedef struct node *link;
     9 struct node {Item item; link l, r;};
    10 
    11 int  Create(link *tp);
    12 void show(link h);
    13 void tranverse(link h, void (*visit)(link));
    14 
    15 //队列存储结构定义
    16 typedef link QItem;
    17 static QItem *q;
    18 static int    N, head, tail;
    19 
    20 void  QUEUEinit(int maxN);
    21 int   QUEUEempty();
    22 void  QUEUEput(QItem item);
    23 QItem QUEUEget();
    24 
    25 
    26 int main()
    27 {
    28     link tree;
    29 
    30     Create(&tree);
    31     tranverse(tree, show);
    32 
    33     return 0;
    34 }
    35 
    36 void QUEUEinit(int maxN)
    37 {
    38     q = (QItem *)malloc(maxN * sizeof(QItem));
    39     if (!q) return;
    40     N = maxN + 1; head = N; tail = 0;
    41 }
    42 
    43 int QUEUEempty()
    44 {
    45     return head % N == tail;
    46 }
    47 
    48 void QUEUEput(QItem item)
    49 {
    50     q[tail++] = item;
    51     tail = tail % N;
    52 }
    53 
    54 QItem QUEUEget()
    55 {
    56     head = head % N;
    57     return q[head++];
    58 }
    59 
    60 int Create(link *tp)
    61 {
    62     //构造方法,或者说构造顺序:中序遍历构造
    63     char x;
    64     scanf("%c",&x);
    65     if(x=='#')
    66     {
    67         *tp=NULL;//指针为空,树节点中的某个指针为空
    68         return 0;
    69     }
    70     *tp=(link)malloc(sizeof(**tp));//将树节点中指针指向该地址空间
    71     if(*tp==NULL)
    72         return 0;
    73     (*tp)->item=x;
    74     Create(&((*tp)->l));
    75     Create(&((*tp)->r));
    76     return 1;
    77 }
    78 
    79 void show(link h)
    80 {
    81     printf(" %c ", h->item);
    82 }
    83 
    84 //层序遍历
    85 void tranverse(link h, void (*visit)(link))
    86 {
    87     QUEUEinit(MAX); QUEUEput(h);
    88     while (!QUEUEempty()){
    89         (*visit)(h = QUEUEget());
    90         if (h->l != NULL) QUEUEput(h->l);
    91         if (h->r != NULL) QUEUEput(h->r);
    92     }
    93 }
  • 相关阅读:
    近期需要学习的
    sdfsdf
    思路绝对清楚,手段绝对下流【转】
    一宅镇京华——看谁还敢在我面前吹丫有钱 
    白天求生存,晚上求发展
    Ten Places to Go for SharePoint Development Information
    Life Record
    Custom Search Result Style Based On SharePoint Xslt Search Result Style
    软考信息系统项目管理师考试记录
    什么是Microsoft SharePoint 2010
  • 原文地址:https://www.cnblogs.com/xiaomanon/p/4266160.html
Copyright © 2020-2023  润新知