• c语言二叉树基本操作


    编译器为vs2013

    #include "stdafx.h"

    #include<malloc.h>

    #include<stdlib.h>

     

    #define OVERFLOW -1

     

    typedef char BElemType;

    typedef int Status;

     

    typedef struct BiTree{

        BElemType data;

        struct BiTree *lchild,*rchild;

    }BitNode,*BinTree;

     

    //函数声明

    void CreatTree(BinTree &T);                      //构建二叉树并赋值

    void PreOrderTaverse(BinTree T);                 //先序遍历二叉树并输出

    void InOrderTaverse(BinTree T);                  //中序遍历二叉树并输出

    void PostOrderTaverse(BinTree T);                //后序遍历二叉树并输出

    Status DepthTree(BinTree T);                     //返回树的深度

    Status LeafNode(BinTree T, int &leaves);         //返回叶子结点个数

    Status TreeNode(BinTree T, int &node);           //返回节点总数

     

    int main()

    {

        int h, leaves=0, node=0;

        BinTree T;

        CreatTree(T);

     

        PreOrderTaverse(T);

        printf(" ");

     

        InOrderTaverse(T);

        printf(" ");

     

        PostOrderTaverse(T);

        printf(" ");

     

        h=DepthTree(T);

        leaves=LeafNode(T,leaves);

        node = TreeNode(T,node);

        printf("树的高度为%d 叶子节点数为%d 节点总数为%d ", h, leaves, node);

    }

     

    //构建二叉树并赋值

    void CreatTree(BinTree &T)

    {

        BElemType ch;

        scanf_s("%c", &ch);

        if (ch== ' ')

           T = NULL;

        else

        {

           if (!(T = (BinTree)malloc(sizeof(BitNode))))

               exit(OVERFLOW);

           T->data = ch;

           CreatTree(T->lchild);

           CreatTree(T->rchild);

        }

    }

     

    //先序遍历二叉树并输出

    void PreOrderTaverse(BinTree T)

    {

        if (T)

        {

            printf("%c ", T->data);

           PreOrderTaverse(T->lchild);

           PreOrderTaverse(T->rchild);

        }

    }

     

    //中序遍历二叉树并输出

    void InOrderTaverse(BinTree T)

    {

        if (T)

        {

           InOrderTaverse(T->lchild);

           printf("%c ", T->data);

           InOrderTaverse(T->rchild);

        }

    }

     

    //后序遍历二叉树并输出

    void PostOrderTaverse(BinTree T)

    {

        if (T)

        {

           PostOrderTaverse(T->lchild);

           PostOrderTaverse(T->rchild);

           printf("%c ", T->data);

        }

    }

     

    //返回树的深度

    Status DepthTree(BinTree T)

    {

        int dl,dr,deep;

        if (!T)

           deep = 0;

        else if ((T->lchild == NULL)&&(T->rchild == NULL))

           deep = 1;

        else

        {

           dl=DepthTree(T->lchild);

           dr=DepthTree(T->rchild);

           deep = 1 + (dl > dr ? dl : dr);

        }

        return deep;

    }

     

    //返回叶子结点个数

    Status LeafNode(BinTree T,int &leaves)

    {

        if (T)

        {

           if ((T->lchild == NULL) && (T->rchild == NULL))

               leaves++;

           LeafNode(T->lchild, leaves);

           LeafNode(T->rchild, leaves);

        }

        return leaves;

    }

     

    //返回节点总数

    Status TreeNode(BinTree T,int &node)

    {

        if (T)

        {

           node++;

           TreeNode(T->lchild, node);

           TreeNode(T->rchild, node);

        }

        return node;

    }

  • 相关阅读:
    一个人事工资模块
    Delete From 带 inner join
    打开SQL AnyWhere *.db数据库
    开启查询IO操作统计
    一个大数据量表访问优化联动下拉框查询优化
    一个简单的配置文件读取类
    MSSQL2005 双机热备说明
    数据库镜像
    GridView + ObjectDatasource 的一个范例代码
    往带自增长列的数据表中导数据
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/6202722.html
Copyright © 2020-2023  润新知