二叉树叶子深度销毁清空(精)二叉树叶子深度销毁清空(精)
#include #include
using std:: cout; using std:: cin;
using std:: endl; using std:: ends;
typedef struct
{
char c;
}elemtype; // 数据类型
typedef struct node {
elemtype data;
struct node * lchild,*rchild;
}binode,*bitree; //二叉树结构
//二叉树的相关操作
in...
二叉树叶子深度销毁清空(精)
#include #include
using std:: cout; using std:: cin;
using std:: endl; using std:: ends;
typedef struct
{
char c;
}elemtype; // 数据类型
typedef struct node {
elemtype data;
struct node * lchild,*rchild;
}binode,*bitree; //二叉树结构
//二叉树的相关操作
int Creat_tree(bitree &T);//创建叉树
void destory_tree(bitree &T); //销毁数
void clear_tree(bitree &T); //清空树
void Inordertraverse(bitree T);//中序遍历二叉树 void preordertraverse(bitree T);//先序遍历二叉树 void postordertraverse(bitree T);//后序遍历二叉树 int depth_tree(bitree T);//求二叉树的深度 int total_tree(bitree T);//求二叉树的节点数 int leaf_node(bitree T); //求二叉树的叶子节点
int Creat_tree(bitree &T) {
char s;
cin>>s;
if('*'==s) T=NULL;
else
{
T=(binode *)malloc(sizeof(binode));
if(!T) return 0;
T->data.c=s;
Creat_tree(T->lchild);
Creat_tree(T->rchild);
}
return 1;
}
void preordertraverse(bitree T) {
if(T)
{
cout<data.c<lchild);
preordertraverse(T->rchild);
}
}
void Inordertraverse(bitree T) {
if(T)
{
Inordertraverse(T->lchild);
cout<data.c<rchild);
}
}
void postordertraverse(bitree T) {
if(T)
{
postordertraverse(T->lchild);
postordertraverse(T->rchild);
cout<data.c<lchild);
Rdp=depth_tree(T->rchild);
maxdp=(Ldp>Rdp)?Ldp:Rdp;
return (maxdp+1);
}
}
int count=0;
int leaf_node(bitree T) {
if(T)
{
leaf_node(T->lchild);
leaf_node(T->rchild);
if(T->lchild==NULL && T->rchild==NULL)
count++;
}
return count;
}
int sum=0;
int total_tree(bitree T) {
if(T)
{
sum++;
total_tree(T->lchild);
total_tree(T->rchild);
}
return sum;
}
void destory_tree(bitree &T) {
if(T)
{
destory_tree(T->lchild);
destory_tree(T->rchild);
free(T);
T=NULL;
}
}
void clear_tree(bitree &T) {
if(T)
{
T->lchild==NULL;
T->rchild==NULL;
}
}
int main()
{
bitree T;
cout<<"操作说明:\n"<<"1.创建叉树\n"<<"2.先序遍历二叉树\n";
cout<<"3.中序遍历二叉树\n"<<"4.后序遍历二叉树\n"<<"5.求二叉树的深度\n";
cout<<"6.求二叉树的叶子节点数\n"<<"7.求二叉树的节点数\n";
cout<<"8.销毁树\n"<<"9.将树清空为空树\n";
cout<<"10.退出操作\n";
cout<<"-----------------------欢迎使用~--------------------\n";
int n;
while((cin>>n))
{
if(1==n) {cout<<"请输入你要创建的二叉树:\n";Creat_tree(T);}
else if(2==n) preordertraverse(T);
else if(3==n) Inordertraverse(T);
else if(4==n) postordertraverse(T);
else if(5==n) printf("这个树的深度:%d层\n",depth_tree(T));
else if(6==n) printf("有%d个叶子节点\n",leaf_node(T));
else if(7==n) printf("这个棵树总共有%d个节点\n",total_tree(T));
else if(8==n) destory_tree(T);
else if(9==n) clear_tree(T);
else if(10==n) {printf("感谢您的使用~再见\n"); break;}
else
cout<<"对不起!你输入有误!请重新操作........!";
cout<
本文档为【二叉树叶子深度销毁清空(精)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。