二叉树的操作

#include <iostream>
using namespace std;
 
typedef char DataType;
#define FALSE 0
#define TRUE 1
 
typedef struct BitNode
{DataType data;
struct BitNode *lchild ,*rchild;
}BitNode,*BitTree;


//初始化 二叉树
BitTree BinTreeInit(BitTree BT)
{BT=NULL;
return BT;
}


//按前序建立二叉树
BitTree BinTreeCreat(BitTree BT)
{char ch;
cout<<"输入结点值:";
cin>>ch;
if(ch=='#') BT=NULL;
else
 {BT=new BitNode;
 BT->data=ch;
    BT->lchild=BinTreeCreat(BT->lchild);
 BT->rchild=BinTreeCreat(BT->rchild);
 }
return BT;
}


//检查二叉树是否为空
int BinTreeEmpty(BitTree BT)
{if(BT==NULL) return TRUE;
else return FALSE;
}


//按前序遍历
void BinTraverse(BitTree BT)
{if(BT)
{cout<<BT->data<<" ";
BinTraverse(BT->lchild);
BinTraverse(BT->rchild);
}


}


//求二叉树的深度
int BinTreeDepth(BitTree BT)
{int i,j;
 if(BT==NULL)
return 0;
else
{i=BinTreeDepth(BT->lchild);
j=BinTreeDepth(BT->rchild);
if(i>j) return (i+1);
else return (j+1);
}
}

 

//求二叉树的所有结点数

int BinTreeCount(BitTree BT)
{//int i,j;
if(BT==NULL)
return 0;
else
{
//i=BinTreeCount(BT->lchild);
//j=BinTreeCount(BT->rchild);
return (BinTreeCount(BT->lchild)+BinTreeCount(BT->rchild)+1);
}
}

 


//清除二叉树 使之成为空树
BitTree BinTreeClear (BitTree BT)
{if(BT)
 {BitTree p;
     p=BT;
 delete p;
    BT->lchild=BinTreeClear(BT->lchild);
 BT->lchild=BinTreeClear(BT->lchild);
 }
return BT;
}

 

//层次遍历二叉树
void TravelTree(Tree r)
{
Queue q;
InitQueue(q);
Tree p,p1,p2;
p=r;//(Tree)malloc(sizeof(TreeNode));
if(p)InsqQueue(q,p);
while(!EmptyQueue(q))
{
OutsqQueue(q,p);
printf("%c",p->data);
p1=p->lchild;p2=p->rchild;
if(p1) InsqQueue(q,p1);
if(p2) InsqQueue(q,p2);
}
}

int scan()
  {int d;
  cout<<"请输入所要进行的操作/n";
  cout<<"1 初始化二叉树 , 2 按前序建立二叉树,3 判空, 4 按前序遍历, 5  二叉树的深度 6 二叉树的结点数 7 清空二叉树  、/n";
  cout<<"其他键  推出........./n";
  cin>>d;
  return (d);
  }

 

  int main()
  {BitTree BT;
  BT=BinTreeInit(BT);
  int can=0;
int s;
  //DataType x;
  while(!can)
  switch(scan())
  {case 1:BT=BinTreeInit(BT);break;
  case 2:BT=BinTreeCreat(BT);
   break;
  case 3:if(BinTreeEmpty(BT))
      cout<<"二叉树为空!/n";
   else cout<<"二叉树不空!/n";
   break;
  case 4:if(BinTreeEmpty(BT))
  cout<<"二叉树为空!"<<endl;
   else {cout<<"二叉树元素为:";
   BinTraverse(BT);}
   cout<<endl;
   break;
  case 5:cout<<"二叉树的深度是:"<<BinTreeDepth(BT)<<endl;
   break;
  case 6:
   s=BinTreeCount(BT);
       cout<<"二叉树的结点数为:";
   cout<<s;
   break;
  case 7:BT=BinTreeClear(BT);
   break;
  default:can=1;
  }
  return 0;
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值