• 二叉树的层次遍历和其深度


    //二叉树的层次遍历和其深度
    #include <cstdio>
    #include <cstdlib>
    //define _OJ_
    #define maxsize 100
    typedef struct tree1
    {
        char data;
        struct tree1 *lchild;
        struct tree1 *rchild;
    } tree1, *tree;

    typedef struct queue1
    {
        tree data;
        struct queue1 *next;
    } queue1, *queue;

    typedef struct Linkqueue1
    {
        queue front;
        queue rear;
    }Linkqueue1, *Linkqueue;

    Linkqueue
    init_queue(void)
    {
        Linkqueue q;
        q = (Linkqueue) malloc (sizeof(Linkqueue1));
        q->front = q->rear = (queue) malloc (sizeof(queue1));
        q->front->next = NULL;
        return q;
    }


    void
    Enqueue(Linkqueue q, tree T)
    //将新的节点插入队尾
    {
        queue p;
        p = (queue) malloc (sizeof(queue1));
        p->data = T;    p->next = NULL;
        q->rear->next = p;
        q->rear = p;
    }

    tree
    Dequeue(Linkqueue q)
    //从队头删除节点
    {
        queue p;
        p = q->front->next;
        q->front->next = p->next;
        if(q->rear == p)    q->rear = q->front;
        return p->data;
    }

    tree
    creat_tree(tree T)
    {
        char ch;
        scanf("%c", &ch);
        if(ch == '#')
            T = NULL;
        else
        {
            T = (tree) malloc (sizeof(tree1));
            T->data = ch;
            T->lchild = creat_tree(T->lchild);
            T->rchild = creat_tree(T->rchild);
        }
        return T;
    }

    int
    isempty(Linkqueue q)
    {
        if(q->front == q->rear)
            return 1;
        else
            return 0;
    }

    void
    travertree(tree T)
    {
        Linkqueue q;
        tree T2;
        q = init_queue();

        Enqueue(q,T);
        while ( !isempty(q)) {
            T2 = Dequeue(q);
            printf("%c ", T2->data);
            if(T2->lchild != NULL)
                 Enqueue(q,T2->lchild);
             if(T2->rchild != NULL)
                 Enqueue(q,T2->rchild);
        }
    }

    int
    deep(tree T)
    {
        int dept = 0;
        if(T)
        {
            int lchild_deep, rchild_deep;
            lchild_deep = deep(T->lchild);
            rchild_deep = deep(T->rchild);
            dept = lchild_deep >= rchild_deep ? (lchild_deep + 1) : (rchild_deep + 1);
        }
        return dept;
    }




    int main(int argc, char const *argv[]) {
    #ifndef _OJ_  //ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
    #endif
        tree T;
        T = creat_tree(T);
        printf("deep == %d ", deep(T));
        travertree(T);
        return 0;
    }


    /*deep == 3
    A
    B
    C
    D*/

  • 相关阅读:
    hdu 4258 Covered Walkway
    hdu 2337 Escape from Enemy Territory
    二分查找
    hdu 2335 Containers
    最大流 Dinic
    进程和并发编程
    黏包
    socket
    网络编程
    异常处理
  • 原文地址:https://www.cnblogs.com/airfand/p/4968911.html
Copyright © 2020-2023  润新知