C++ 二叉链表

#include <iostream>

using namespace std;

#include "Status.h"

typedef char TElemType;

#include "BiTree.h"

int main()

{

 BiTree T;  

CreateBiTree(T);

 cout<<"二叉树的深度为:"<<Depth(T)<<endl;  

 cout<<"二叉树中结点个数为:"<<NodeCount(T)<<endl;

 cout<<"二叉树中叶子结点个数为:"<<LeavesNodeCount(T)<<endl;

 cout<<"先序遍历:";  PreOrderTraverse(T);  cout<<"\n中序遍历:";  

 InOrderTraverse(T);  

 cout<<"\n后序遍历:";  

 PostOrderTraverse(T);  

 cout<<endl;

 return 0;

}

---------*****Status.h******-------------

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status;

---------*****BiTree.h******--------------

typedef struct BiTNode{

 TElemType data;    //结点数据域 

 struct BiTNode *lchild,*rchild;  //左右孩子指针

}BiTNode,*BiTree;  

void CreateBiTree(BiTree &T)

{

 char ch;

 cin>>ch;

 if(ch=='#') T=NULL;

 else{  

  T=new BiTNode;  

  T->data=ch;  

  CreateBiTree(T->lchild);   

  CreateBiTree(T->rchild);

  }

}

 int Depth(BiTree 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 NodeCount(BiTree T)

{

  if(T==NULL) return 0;

  else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;

}

int LeavesNodeCount(BiTree T)

{

   if(!T) return 0;  

   else if(!T->lchild&&!T->rchild) return 1;

   else return LeavesNodeCount(T->lchild)+LeavesNodeCount(T->rchild);

}

void PreOrderTraverse(BiTree T)

{

   if(T)  {   cout<<T->data;   PreOrderTraverse(T->lchild);   PreOrderTraverse(T->rchild);  }

}

void InOrderTraverse(BiTree T)

{

 if(T)  {   InOrderTraverse(T->lchild);   cout<<T->data;   InOrderTraverse(T->rchild);  }

}

void PostOrderTraverse(BiTree T)

{

 if(T)  {   PostOrderTraverse(T->lchild);   PostOrderTraverse(T->rchild);   cout<<T->data;  }

}

转载于:https://www.cnblogs.com/YY-Xcode/p/4920069.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值