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##
  • 相关阅读:
    javascript数组查重方法总结
    html5的web存储
    掌握javascript中的最基础数据结构-----数组
    ES解决geoip的location不为geo_point格式
    elk默认分片只有1000导致索引没有创建
    Polysh批量管理服务器
    Git永久删除文件和历史记录
    windows下设置JupyterNotebook默认目录
    windwos安装RabbitMQ
    win7计划任务报该任务映像己损坏或己篡改
  • 原文地址:https://www.cnblogs.com/linxiaojie517/p/7771477.html
Copyright © 2011-2022 走看看