【实现二叉树的各种基本运算的算法】
问题描述:该算法的设计,要求运行结果如下所示:
二叉树的基本运算如下:
(1)创建二叉树
(2)输出二叉树:A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))
(3)H 结点:左孩子为# J 右孩子为 K
(4)二叉树 bt 的高度:7
(5)释放二叉树 bt
数据结构实验课的内容,写了一天,算是写完了。对二叉树进行一个简单的总结。这是二叉树的一些基本的操作,直接上代码
代码如下:
#include<bits/stdc++.h>
#define telemtype char
using namespace std;
typedef struct node{
telemtype data;
struct node *lchild,*rchild;
} *Bitree;
void creatree(Bitree &tt)
{
char c;
cin>>c;
if(c=='#') tt=NULL;
else
{
tt=(node *)malloc(sizeof(node));
tt->data=c;
creatree(tt->lchild);
creatree(tt->rchild);
}
}
void prinflr(Bitree &t)
{
if(t)
{
if(t->lchild)
{
printf("%c的左孩子节点为:%c\n",t->data,t->lchild->data);
prinflr(t->lchild);
}
if(t->rchild)
{
printf("%c的右孩子节点为:%c\n",t->data,t->rchild->data);
prinflr(t->rchild);
}
}
}
void printtree(Bitree &t)
{
if(t)
{
printf("%c",t->data);
if(!t->lchild&&!t->rchild)
{
return ;
}
else printf("(");
printtree(t->lchild);
if(t->rchild) cout<<",";
printtree(t->rchild);
printf(")");
}
}
//ABD##EHJ##KL##M#N###CF##G#I##
int treehigh(Bitree &t)
{
if(t==NULL) return 0;
else if(!t->lchild&&!t->rchild) return 1;
else return 1+max(treehigh(t->lchild),treehigh(t->rchild));
}
void deletetree(Bitree &t)
{
deletetree(t->lchild);
deletetree(t->rchild);
free(t);
t=NULL;
}
int main()
{
Bitree t;
creatree(t);
cout<<"左右孩子遍历:"<<endl;
prinflr(t);
cout<<"整棵树遍历:"<<endl;
printtree(t);
cout<<endl<<"树的高度为:"<<treehigh(t)<<endl;
deletetree(t);
}
努力加油a啊,(o)/~