二叉树的构建,遍历等基本操作

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
typedef struct BTNode
{
        char data;
     struct BTNode *lchild,*rchild;
}BTNode;
void  CreateBTNode(BTNode *&T);//构建二叉树 
void  PreBTNode(BTNode *T);//先序遍历二叉树
void  InBTNode(BTNode *T);//中序遍历二叉树
void  PostBTNode(BTNode *T);//后序遍历二叉树
int   DepthBTNode(BTNode *T);//二叉树深度
int   LeafBTNode(BTNode *T);//叶子节点数  
int main()
{
    BTNode *T;
    printf("-----------构造二叉树----------\n");
    CreateBTNode(T);
    printf("\n---------先序遍历二叉树-------\n");
    PreBTNode(T);
    printf("\n---------中序遍历二叉树-------\n");
    InBTNode(T);
    printf("\n---------后序遍历二叉树-------\n");
    PostBTNode(T);
    printf("\n--------求二叉树深度-------\n");
    printf("%d\n",DepthBTNode(T));
    printf("\n--------求叶子节点数-------\n");
    printf("%d\n",LeafBTNode(T)); 
    system("pause");
    return 0;

//构建二叉树
void  CreateBTNode(BTNode *&T)
{
      
      char ch;
      scanf("%c",&ch);
      if(ch=='#')
      T=NULL;
      else
      {
          T=(BTNode *)malloc(sizeof(BTNode));
          T->data=ch;
          CreateBTNode(T->lchild);
          CreateBTNode(T->rchild); 
      }
}
//先序遍历二叉树
void  PreBTNode(BTNode *T)
{
      if(T!=NULL)
      {
      printf("%c\t",T->data);
      PreBTNode(T->lchild);
      PreBTNode(T->rchild);
      }
}
//中序遍历二叉树
void  InBTNode(BTNode *T)
{
      if(T!=NULL)
      {
      InBTNode(T->lchild);
      printf("%c\t",T->data);
      InBTNode(T->rchild);
      }
}
//后序遍历二叉树
void  PostBTNode(BTNode *T)
{
      if(T!=NULL)
      {
      
      PostBTNode(T->lchild);
      PostBTNode(T->rchild);
      printf("%c\t",T->data);
      }
}
//二叉树深度
int   DepthBTNode(BTNode *T)
{     int left,right;
      if(T==NULL)
        return 0;
      else
      {
          left= DepthBTNode(T->lchild);
          right=DepthBTNode(T->rchild); 
          return (left>right?left:right+1); 
      }
}
      
      


//叶子节点数
int   LeafBTNode(BTNode *T)
{
      
    static  int count=0;
      if(T!=NULL)
      {
      if(T->lchild==NULL&&T->rchild==NULL)
        count++;
      LeafBTNode(T->lchild);
      LeafBTNode(T->rchild);
      }
return  count;
}
        



































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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值