二叉树的基本参数计算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(T==NULL)
return(0);
else
{
dep1=Depth(T->lchild);
dep2=Depth(T->rchild);
if(dep1>dep2)
return(dep1+1);
else
return(dep2+1);
}
}
//按广义表形式输出二叉树
voidDisptree(BiTNode*T)
}BiTNode,*BiTree;
//建立二叉树(按先序序列生成二叉树,#表示空节点)
voidCreateBiTree(BiTree*T)
{
charch;
scanf("%c",&ch);
getchar();/*回车键(每次输入一个字符后,需敲回车键)*/
if(ch=='#')
{
printf("不产生子树。\n");
{
BiTreeT=NULL;
intj;
intsign = 1;
intnum;
printf("\t\t二叉树的参数计算\n");
//printf("请将二叉树的先序序列输入以建立二叉树,叶子节点用空格代替。\n");
//printf("您必须一个一个地输入字符。\n");
while(sign)
{
printf("\n-----------主菜单------------\n");
CreateBiTree(&(*T)->rchild);
}
}
//交换左右子树产生新的树t返回到主函数
BiTNode*swap(BiTreeT)
{
BiTreet,t1,t2;
if(T==NULL)
t=NULL;
else
{
t=(BiTNode*)malloc(sizeof(BiTNode));
t->data=T->data;
else
if(T->lchild==NULL&&T->rchild==NULL)
return 1;
else
{
num1=leafs(T->lchild);
num2=leafs(T->rchild);
return (num1+num2);
}
}
//求二叉树的深度
intDepth(BiTNode*T)
{
intdep1,dep2;
printf("\n请选择: \n");
scanf("%d",&j);
getchar();
switch(j)
{
case 1:
printf("生成二叉树:");
CreateBiTree(&T);
printf("\n");
printf("\n");
来自百度文库break;
case 2:
if(T)
{
printf("此二叉树的深度为:");
t1=swap(T->lchild); //交换左右子树
t2=swap(T->rchild);
t->lchild=t2;
t->rchild=t1;
}
return(t);
}
//求树的叶子结点数
int leafs(BiTree T)
{
int num1,num2;
if(T==NULL) return 0;
{
if(T)
{
printf("%c",T->data);
if(T->lchild|| T->rchild)
{
printf("(");
Disptree(T->lchild);
printf(",");
Disptree(T->rchild);
printf(")");
}
}
else
printf("#");
}
void main()
/*二叉树的基本参数计算*/
#include<stdio.h>
#include<malloc.h>
#defineMaxSize20
typedefintElemType;
#define OK 1
typedefstructBiTNode
{
ElemTypedata;
structBiTNode*lchild, *rchild;
*T=NULL;
}
else
{
if(!(*T=(BiTNode*)malloc(sizeof(BiTNode))))
{
printf("分配空间失败");
return;
}//生成一个新节点
(*T)->data =ch;
printf("产生左右子树。\n");
CreateBiTree(&(*T)->lchild);
}
elseprintf("二叉树为空!\n");
break;
case 4:
if(T)
{
printf("二叉树的叶子结点数:");
num=leafs(T);
printf("%d",num);
printf("\n");
printf("\n");
}
elseprintf("二叉树为空!\n");
break;
case 5:
if(T)
{
printf("输出二叉树:");
Disptree(T);
printf("\n");
printf("\n");
}
elseprintf("二叉树为空!\n");
break;
default:
sign=0;
printf("程序运行结束,按任意键退出!\n");
}
}
}
printf("\n 1.生成二叉树(#表示空结点)\n");
printf("\n 2.求二叉树的深度\n");
printf("\n 3.交换二叉树\n");
printf("\n 4.求二叉树的叶子结点数\n");
printf("\n 5.输出二叉树的广义表形式\n");
printf("\n 0.退出程序\n");
printf("%d",Depth(T));
printf("\n");
printf("\n");
}
elseprintf("二叉树为空!\n");
break;
case 3:
if(T)
{
printf("交换二叉树的左右子树:");
T=swap(T);
Disptree(T);
printf("\n");
printf("\n");
相关文档
最新文档