zoukankan      html  css  js  c++  java
  • 二叉树的层次遍历和(叶子)节点

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define size 100
    #define resize 10 
    typedef struct Bitnode{        //定义结点
        char data;
        struct Bitnode *lchild,*rchild;
    }Bitnode,*Bitree;
    
    typedef struct {             //定义队列
        Bitree *base;
        int front;
        int rear;
    }Queue;
    
    int count=0;
    
    void Initqueue(Queue &Q)            //建立队列
    {
        Q.base=(Bitree*)malloc(size*sizeof(Queue));
        if(!Q.base)
            exit(0);
        Q.front=Q.rear=0;    
    }
    
    Bitree Enqueue(Queue &Q,Bitree e)        //入队列
    {
        if((Q.rear+1)%size==Q.front)        //循环队列
            return 0;
        Q.base[Q.rear]=e;
        Q.rear=(Q.rear+1)%size;
        return e;
    }
    
    int Queueempty(Queue Q)          //队列的判空操作
    {
        if(Q.front==Q.rear)
            return 1;
        return 0;
    }
    
    void Dequeue(Queue &Q,Bitree &e)          //出队列
    {
        
        if(Q.front==Q.rear)
            exit(0);
        e=Q.base[Q.front];
        Q.front=(Q.front+1)%size;
    }
    void Createbitree(Bitree &bt)
    {
        //建立二叉树的二叉链表
        char ch;
        ch=getchar();
        if(ch=='#')
            bt=NULL;
        else
        {
            bt=(Bitree)malloc(sizeof(Bitnode));
            bt->data=ch;
            bt->lchild=bt->rchild=NULL;
            count++;
            Createbitree(bt->lchild);
            Createbitree(bt->rchild);    
        } 
    }
    
    void Levelordertraverse(Bitree bt)       //二叉树的层次遍历
    {
        Bitree p;
        Queue Q;
        if(bt)
        {
            Initqueue(Q);
            Enqueue(Q,bt);
            while(!Queueempty(Q))
            {
                Dequeue(Q,p);
                printf("%c ",p->data);
                if(p->lchild)
                    Enqueue(Q,p->lchild);
                if(p->rchild)
                    Enqueue(Q,p->rchild);
            }
        }
        printf("
    ");
    }
    
    void Leafnode(Bitree bt)        //找叶子结点
    {
        Bitree p;
        Queue Q;
        if(bt)
        {
            Initqueue(Q);
            Enqueue(Q,bt);
            while(!Queueempty(Q))
            {
                
                Dequeue(Q,p);
                if(p->lchild||p->rchild)
                {
                    if(p->lchild)
                    Enqueue(Q,p->lchild);
                     if(p->rchild)
                    Enqueue(Q,p->rchild);
                }
                else
                printf("%c ",p->data);
            }
        }
        printf("
    ");
    }
    
    int main()
    {
        Bitree bt;
        Createbitree(bt);
        printf("层次遍历二叉树:
    ");
        Levelordertraverse(bt); 
        printf("输出叶子结点:
    ");
        Leafnode(bt);
        printf("输出结点总数:%d
    ",count);
        return 0;
    }
    
    //ABD###CE##F##
  • 相关阅读:
    针对小程序for循环绑定数据,实现toggle切换效果(交流QQ群:604788754)
    小程序中bindtap绑定函数,函数参数event对数据的处理
    小程序中data数据的处理方法总结(小程序交流群:604788754)
    Power OFF and ON USB device in linux (ubuntu)
    linux控制USB的绑定/解绑
    卡内操作系统COS
    Linux内核:sk_buff解析
    skb_store_bits() 和 skb_copy_bits()
    skb详细解析【转】
    TCP:WireShark分析,序列号Seq和确认号Ack
  • 原文地址:https://www.cnblogs.com/linxiaojie517/p/7771477.html
Copyright © 2011-2022 走看看