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##
  • 相关阅读:
    九度OJ 1031:xxx定律 (基础题)
    九度OJ 1030:毕业bg (01背包、DP)
    九度OJ 1029:魔咒词典 (排序)
    九度OJ 1028:继续畅通工程 (最小生成树)
    九度OJ 1027:欧拉回路 (欧拉回路)
    九度OJ 1026:又一版 A+B (进制转换)
    九度OJ 1025:最大报销额 (01背包、DP)
    九度OJ 1024:畅通工程 (最小生成树)
    九度OJ 1023:EXCEL排序 (排序)
    九度OJ 1022:游船出租 (统计)
  • 原文地址:https://www.cnblogs.com/linxiaojie517/p/7771477.html
Copyright © 2011-2022 走看看