数据结构——二叉树

//功能:创建二叉树,实现先序,中序,后序,叶子节点个数,求深度功能
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
using namespace std;

//存储结构
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

int leafCount=0;

int Creat(BiTree &T);
int PreOrder(BiTree T);
int InOrder(BiTree T);
int PostOrder(BiTree T);
int Leaf(BiTree T);
int Deepth(BiTree T);
void Visit(char e);

int main()
{
    BiTree T;
    Creat(T);
    while(1){
    cout<<"***************二叉树****************\n";
    cout<<"1:先序遍历\n";
    cout<<"2:中序遍历\n";
    cout<<"3:后序遍历\n";
    cout<<"4:求叶子节点\n";
    cout<<"5:求树的深度\n";
    cout<<"其他任意键退出!\n";
    cout<<"*************************************\n";
    int in;
    cout<<"choice:";
    cin>>in;
    if(in==1){PreOrder(T);cout<<endl;}
    else if(in==2){InOrder(T);cout<<endl;}
    else if(in==3){PostOrder(T);cout<<endl;}
    else if(in==4){Leaf(T);cout<<leafCount<<endl;}
    else if(in==5){cout<<"deep:"<<Deepth(T);cout<<endl;}
    else if(in!=1||in!=2||in!=3||in!=4||in!=5)break;
    }
    return 0;
}
int Creat(BiTree &T)
{//按先序建树
    char data;
    cout<<"Input Node data:";
    cin>>data;
    if(data=='*')T=NULL;
    else{
         if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))exit(0);
         T->data=data;
         Creat(T->lchild);
         Creat(T->rchild);
    }
    return 1;
}
int PreOrder(BiTree T)
{//先序遍历
    if(T){
         Visit(T->data);
         PreOrder(T->lchild);
         PreOrder(T->rchild);
    }
    return 1;
}
int InOrder(BiTree T)
{//中序遍历
    if(T){
         InOrder(T->lchild);
         Visit(T->data);
         InOrder(T->rchild);
    }
    return 1;
}
int PostOrder(BiTree T)
{//后序遍历
    if(T){
         PostOrder(T->lchild);
         PostOrder(T->rchild);
         Visit(T->data);
    }
    return 1;
}
int Leaf(BiTree T)
{//求叶子节点
    if(T){
         if(T->lchild==NULL&&T->rchild==NULL)leafCount++;
         Leaf(T->lchild);
         Leaf(T->rchild);
    }
    return 1;
}
int Deepth(BiTree T)
{//求树的深度
     int ld,rd;
     if(T==NULL)return 0;
         ld=1+Deepth(T->lchild);
         rd=1+Deepth(T->rchild);
     return ld>rd?ld:rd;
}
void Visit(char e)
{//访问节点
    cout<<e<<" ";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值