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

来源:互联网 发布:中国历史延续 知乎 编辑:程序博客网 时间:2024/04/30 08:26
/*
本程序采用的是递归调用算法,操作简单,理解较难


采用的是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;
}
0 0
原创粉丝点击