您的位置:首页 > 其它

二叉链表的定义与基本操作实现函数

2017-06-01 17:08 756 查看
#include<stdio.h>
#include<stdlib.h>

typedef int TElemtype;

typedef struct BiTNode{
TElemtype data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
#include"binary_tree.h"
main()
{
BiTree T,T1,T2;
InitBiTree(T);
InitBiTree(T1);
printf("提示输入-1代表为空!");
putchar(10);
CreateBiTree(T);
//	int x;
//	scanf("%d",&x);
//	int xroot;
//	xroot= Xfind(T,x);
//	printf("%d",xroot);
putchar(10);
int u,k;
printf("总结点数:%d\n",u=JDcount(T));
printf("叶子节点数:%d\n",k=YJDcount(T));
BiTreeEmpty (T);
putchar(10);
int high;
high=BiTreeDepth(T);
printf("深度为:%d",high);
putchar(10);
PreOrderTraverse(T);
putchar(10);
InOrderTraverse (T);
putchar(10);
PostOrderTraverse (T);
putchar(10);
CreateBiTree(T1);
int a=xiangsi(T,T1);
if(a==1)printf("相似");
else printf("不相似");
putchar(10);
DestroyBiTree(T);
BiTreeEmpty (T);
return 0;
}
/*~~~~~~~~~~~~~~~~~~*/
void InitBiTree(BiTree &T) //初始化二叉树T
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)exit(-2);
}
int CreateBiTree(BiTree &T) //按先序遍历序列建立二叉链表T
{
TElemtype	e;
scanf("%d",&e);
if(e==-1)
{
T=NULL;
}
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)exit(-2);
T->data=e;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return 1;
}
bool BiTreeEmpty (BiTree T) //检查二叉树T是否为空,空返回1,否则返回0
{
if(T==NULL)
{
printf("Destroyed!");
return 1;
}
else
{
printf("二叉树不为空!");
return 0;
}

}
int BiTreeDepth(BiTree T) //求二叉树T的深度并返回该值
{
int a=0,b=0;
if(T==NULL)
{
return 0;
}
else
{
a=BiTreeDepth(T->lchild);
b=BiTreeDepth(T->rchild);
}
return a>b ? a+1:b+1;
}

void PreOrderTraverse (BiTree T) //先序遍历二叉树T
{
if(T==NULL)
{
return;
}
else
{	printf("%d ",T->data);
PreOrderTraverse (T->lchild);
PreOrderTraverse (T->rchild);
}
}

void InOrderTraverse (BiTree T) //中序遍历二叉树T
{
if(T==NULL)
{
return;
}
else
{
InOrderTraverse (T->lchild);
printf("%d ",T->data);
InOrderTraverse (T->rchild);
}
}

void PostOrderTraverse (BiTree T) //后序遍历二叉树T
{
if(T==NULL)
{
return;
}
else
{
PostOrderTraverse (T->lchild);
PostOrderTraverse (T->rchild);
printf("%d ",T->data);
}
}

void DestroyBiTree(BiTree &T) //销毁二叉树T
{
if(T)
{
DestroyBiTree(T->lchild);
DestroyBiTree(T->rchild);
free(T);
T=NULL;
}

}

int JDcount(BiTree T)
{
if(T!=NULL)
{
return 1+JDcount (T->lchild)+JDcount (T->rchild);
}
return 0;
}

int YJDcount(BiTree T)
{
if(T!=NULL){
if(T->lchild==NULL&&T->rchild==NULL){
return 1;
}else{
return 0+YJDcount(T->lchild)+YJDcount(T->rchild);
}
}
return 0;
}

int xiangsi(BiTree
4000
T,BiTree T1)
{
if(T==NULL&&T1==NULL)
{
return 1;
}else if(T!=NULL&T1!=NULL){
if(xiangsi(T->lchild,T1->lchild)!=NULL&&xiangsi(T->rchild,T1->rchild)!=NULL)
return 1;
else
return 0;
}
else return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐