简单的二叉树创建及其基本的运算(C语言)

/*
本程序采用的是递归调用算法,操作简单,理解较难


采用的是c++的书写风格,但并不是c++类的思想,使用的认为C语言的编程思想
*/
#include<iostream>
using namespace std;


typedef char elementType;
typedef struct BLNode
{
    elementType data;
    struct BLNode *lchild;
    struct BLNode *rchild;
}BiNode,*BiTree;
void creat(BiTree &T)//创建
{
    char ch;
    cin>>ch;
    if(ch=='/')
        T=NULL;
    else
    {
        T=new BiNode;
        T->data=ch;
        creat(T->lchild);
        creat(T->rchild);
    }
}
void protrave(BiTree T)//先序
{
    if(T)
    {
        cout<<T->data;
        protrave(T->lchild);
        protrave(T->rchild);
    }
}
void midtrave(BiTree T)//中序
{
    if(T)
    {
        midtrave(T->lchild);
        cout<<T->data;
        midtrave(T->rchild);
    }
}
void lasttrave(BiTree T)//后序
{
    if(T)
    {
        lasttrave(T->lchild);
        lasttrave(T->rchild);
        cout<<T->data;
    }
}
int H;//全局变量
int heigth(BiTree T)//树高
{
    int Hl,Hr;
    if(T==NULL)//或者写成   if(!T)
        return 0;
    else
    {
        Hl=heigth(T->lchild);
        Hr=heigth(T->rchild);
        H=Hl>Hr?Hl+1:Hr+1;
    }
    return H;
}
int n;
void countleaf(BiTree T)//叶子节点数
{
    if(T)
    {
        if(!T->lchild&&!T->rchild)
            n++;
        countleaf(T->lchild);
        countleaf(T->rchild);
    }
}


int main(void)
{
    BiTree T;
    cout<<"创建一个二叉树:";
    creat(T);
    cout<<"**********遍历算法(递归)***********"<<endl;


    cout<<"先序遍历:";
    protrave(T);
    cout<<endl;
    cout<<"中序遍历:";
    midtrave(T);
    cout<<endl;
    cout<<"后序遍历:";
    lasttrave(T);
    cout<<endl;
    heigth(T);
    cout<<"二叉树的高度:"<<H;
    cout<<endl;
    countleaf(T);
    cout<<"二叉树的叶子节点数:"<<n;
    cout<<endl;
    return 0;
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值