简单二叉树

//定义头部
#include <iostream>
using namespace std;

struct BiTNode{
    char data;
    struct BiTNode *lchild, *rchild;//左右孩子
};
BiTNode *T;
void CreateBiTree(BiTNode* &T);
void Inorder(BiTNode* &T);
void PreOrderTraverse(BiTNode* &T);
void Posorder(BiTNode* &T);
int NodeCount(BiTNode* T);
int Depth(BiTNode* &T);
//先序递归创建二叉树树
void CreateBiTree(BiTNode* &T)
{
 //按先序输入二叉树中结点的值(一个字符),空格字符代表空树,
 //构造二叉树表表示二叉树T。
    char ch;
    cin>>ch;
    if(ch=='*')
        T=NULL;
    else
    {
        T=new BiTNode;//产生新的子树
        T->data=ch;//由getchar()逐个读入来
        CreateBiTree(T->lchild);//递归创建左子树
        CreateBiTree(T->rchild);//递归创建右子树
    }
}//CreateTree
//先序递归遍历二叉树
void PreOrderTraverse(BiTNode* &T)
{
 //先序递归遍历二叉树
    if(T)
    {//当结点不为空的时候执行
        cout<<T->data;
        PreOrderTraverse(T->lchild);//
        PreOrderTraverse(T->rchild);
    }
    else
        cout<<" ";
}//PreOrderTraverse
//中序遍历二叉树
void Inorder(BiTNode* &T)
{//中序递归遍历二叉树
    if(T)
    {//bt=null退层
        Inorder(T->lchild);//中序遍历左子树
        cout<<T->data;//访问参数
        Inorder(T->rchild);//中序遍历右子树
    }
    else
        cout<<" ";
}//Inorder
//后序递归遍历二叉树
void Posorder(BiTNode* &T)
{
    if(T)
    {
        Posorder(T->lchild);//后序递归遍历左子树
        Posorder(T->rchild);//后序递归遍历右子树
        cout<<T->data;//访问根结点
    }
    else
        cout<<"";
}
//统计二叉树中结点的个数
int NodeCount(BiTNode* T)
{//统计二叉树T中结点的个数
    if(T==NULL)
        return 0;//如果是空树,则结点个数为零,递归结束
    else
        return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
        //否则结点个数为左子树的结点个数+右子树的结点个数+1
}
int Depth(BiTNode* &T)
{
    if(T==NULL)
    {
        return 0;
    }
    else
    {
        int m=Depth(T->lchild);
        int n=Depth(T->rchild);
        if(m>n)
            return (m+1);
        else
            return (n+1);
    }
}
//主函数
int main()
{
    cout<<"创建一颗树,其中A->Z字符代表树的数据,用“*”表示空树:"<<endl;
    CreateBiTree(T);
    cout<<"先序递归遍历:"<<endl;
    PreOrderTraverse(T);
    cout<<endl;
    cout<<"中序递归遍历:"<<endl;
    Inorder(T);
    cout<<endl;
    cout<<"后序递归遍历:"<<endl;
    Posorder(T);
    cout<<endl;
    cout<<"二叉树的结点个数:";
    cout<<NodeCount(T)<<endl;
    cout<<"二叉树的深度为:";
    cout<<Depth(T)<<endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值