zoukankan      html  css  js  c++  java
  • 【数据结构】二叉树

    代码内容包括:二叉树的遍历(先序、中序、后序) 二叉树的创建(先序) 以及二叉树深度和叶子数目的求法

    </details>
    
    #include <stdio.h>
    #include <stdlib.h>
    typedef char dataType;
    
    typedef struct node{
    
        dataType data;
        struct node *lchild,*rchild;
    
    }BinTree;
    /*---创建二叉树---*/
    BinTree *CreateBinTree()
    {/*先序建立一个二叉树链表*/
        BinTree *bt = NULL;
        char ch;
    
        ch = getchar();
    
        if(ch!='#')
        {
            bt = (BinTree *)malloc(sizeof(BinTree));
            bt->data = ch;
            bt->lchild = CreateBinTree();
            bt->rchild = CreateBinTree();
    
        }
        return bt;
    
    }
    void  endprintfBinTree(BinTree *bt)
    {
        if(bt != NULL)
        {/*---后序二叉树遍历---*/
    
            endprintfBinTree(bt->lchild);
            endprintfBinTree(bt->rchild);
            printf("%c",bt->data);
        }
    
    }
    void  firstprintfBinTree(BinTree *bt)
    {
        if(bt != NULL)
        {/*---先序二叉树遍历---*/
            printf("%c",bt->data);
            firstprintfBinTree(bt->lchild);
            firstprintfBinTree(bt->rchild);
        }
    
    }
    void  middelprintfBinTree(BinTree *bt)
    {
        if(bt != NULL)
        {/*---中序二叉树遍历---*/
    
            middelprintfBinTree(bt->lchild);
            printf("%c",bt->data);
            middelprintfBinTree(bt->rchild);
        }
    
    }
    
    
    /*---按中序遍历的方法求叶子节点的总数---*/
    void CountLeaf(BinTree *t,int* count)
    {
        if(t)
        {
            if(!(t->lchild)&&!(t->rchild))
            {
                (*count)++;
    
            }
             CountLeaf(t->lchild,count);
             CountLeaf(t->rchild,count);
    
        }
    
    }
    /*---求二叉树深度---*/
    int  Depth(BinTree *t)
    {
        int h1,hr;
        if(!t) return 0;
        else
        {
            h1 = Depth(t->lchild);
            hr = Depth(t->rchild);
            if(h1>=hr) return h1+1;
            else       return hr+1;
    
        }
    }
    
    int main()
    {
        BinTree *bt;
        int a = 0;
    
       bt =  CreateBinTree();
        firstprintfBinTree(bt);
        middelprintfBinTree(bt);
        endprintfBinTree(bt);
        CountLeaf(bt,&a);
        printf("%d",a);
    
        printf("
    %d",Depth(bt));
    
    
    
    
    }
    
    
    
  • 相关阅读:
    在VMware9.0上安装CentOS6.3+mysql5.5.28数据库 东师理想
    Python学习总结(二)python的练习方法
    gdb调试nasm语法的汇编程序(转载)
    配置Bochs
    量变与质变(生活中,技术上)
    设置gdb反汇编语法为intel(转载)
    Python学习总结(一)
    2012暑假计划
    理解TCP为什么需要进行三次握手(白话)(转载)
    对自己的学习方式的思考(转载)
  • 原文地址:https://www.cnblogs.com/zhujiaozhu/p/15490686.html
Copyright © 2011-2022 走看看