数据结构 二叉树

#include<iostream>

using namespace std;

typedef struct Node{

char data;

struct Node *lchild,*rchi

ld;

}BTreeNode,*BTree;


void InitBT(BTree &BT)//初始化二叉树BT

{

BT=NULL;

}


void CreateBT(BTree &BT)//根据字符串a所给出的二叉树描述,建立二叉链表存储结构

{

char ch;

cin>>ch;

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

else{

BT=new BTreeNode;

BT->data=ch;

CreateBT(BT->lchild);

CreateBT(BT->rchild);

}

}


int EmptyBT(BTree BT)//判空

{

if(BT==NULL)return 1;//空返回1

return 0;

}


int DepthBT(BTree BT)//求深度

{

if(BT==NULL)return 0;

else{

int m=DepthBT(BT->lchild);

int n=DepthBT(BT->rchild);

if(m>n)return(m+1);

else return(n+1);

}

}


int NodeCount(BTree BT)//求结点个数

{

if(BT==NULL)return 0;

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

}


void PreOrder(BTree BT)//先序遍历 递归

{

if(BT)

{

cout<<BT->data;

PreOrder(BT->lchild);

PreOrder(BT->rchild);

}

}


void InOrder(BTree BT)//中序遍历 递归

{

if(BT)

{

PreOrder(BT->lchild);

cout<<BT->data;

PreOrder(BT->rchild);

}

}


void PostOrder(BTree BT)//后序遍历 递归

{

if(BT)

{

PreOrder(BT->lchild);

PreOrder(BT->rchild);

cout<<BT->data;

}

}


int FindBT(BTree BT,char x)

{

if(BT)

{

if(BT->data==x)return 1;

if(BT->lchild)FindBT(BT->lchild,x);

if(BT->rchild)FindBT(BT->rchild,x);

}

else return 0;

}


void DestroyBT(BTree &BT)

{

BT=NULL;

delete BT;

}


void ExchangeBT(BTree &BT)

{

BTree temp;

if(BT){

temp=BT->lchild;

BT->lchild=BT->rchild;

BT->rchild=temp;

ExchangeBT(BT->rchild);

ExchangeBT(BT->lchild);

}

}


void main()

{

BTree BT;

char ch=0;

cout<<"20-8软工2-9-115"<<endl;

cout<<"初始化二叉树"<<endl;

InitBT(BT);

if(EmptyBT(BT))cout<<"该二叉树为空"<<endl;

cout<<"先序构建二叉树,输入元素,输入#结束"<<endl;

CreateBT(BT);

if(!EmptyBT(BT))cout<<"二叉树创建成功"<<endl;

cout<<"二叉树BT的深度为"<<DepthBT(BT)<<endl;

cout<<"二叉树BT共有"<<NodeCount(BT)<<"个结点"<<endl;

cout<<"先序遍历二叉树"<<endl;

PreOrder(BT);cout<<endl;

cout<<"中序遍历二叉树"<<endl;

InOrder(BT);cout<<endl;

cout<<"后序遍历二叉树"<<endl;

PostOrder(BT);cout<<endl;

cout<<"输入要查找的值"<<endl;

cin>>ch;

if(FindBT(BT,ch))cout<<"查找成功"<<endl;

else cout<<"查找失败"<<endl;

cout<<"交换左右子树"<<endl;

ExchangeBT(BT);

cout<<"先序遍历二叉树"<<endl;

PreOrder(BT);cout<<endl;

cout<<"中序遍历二叉树"<<endl;

InOrder(BT);cout<<endl;

cout<<"后序遍历二叉树"<<endl;

PostOrder(BT);cout<<endl;

DestroyBT(BT);

}

 

posted @ 2022-07-19 09:06  霖霖的信箱  阅读(27)  评论(0)    收藏  举报