• 二叉树的层次遍历和(叶子)节点


    #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##
  • 相关阅读:
    #cat ora11g_ora_.trc
    Vue学习之路3-浅析Vue-cli搭建项目后的目录结构
    Vue学习之路2-项目初搭建
    Vue学习之路1-集成环境安装
    laravel中建立公共视图的方法
    Windows下Laravel5.5 的 Homestead 开发环境部署
    技术好文推荐
    中文文案排版指北
    消息队列的使用
    Laravel 验证中文本地化
  • 原文地址:https://www.cnblogs.com/linxiaojie517/p/7771477.html
Copyright © 2020-2023  润新知