#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define OK 1
#define ERROR 0
typedef int Telemtype;
//二叉树链式存储
typedef struct BiNode{
Telemtype data;
struct BiNode *lchild,*rchild;//左右孩子指针
}BiNode,*BiTree;
//建立二叉树(左右孩子为空时,用#代替)
int CreateBiTree(BiTree &T){
char ch;
scanf("%c",&ch);//输入字符
if(ch =='#')//判断是否为#,若是,则该位置为空
T=NULL;
else{
if(!(T=(BiNode*)malloc(sizeof(BiNode))))//若不是,则为其分配一个结点的空间
return ERROR;
T->data=ch;//生成根节点,存入字符
CreateBiTree(T->lchild);//构造左子树
CreateBiTree(T->rchild);//构造右子树
}
return OK;
}
//二叉树中序遍历
int InOrderTraverse(BiTree T){
if(T==NULL)
return OK;
else{
InOrderTraverse(T->lchild);//递归遍历左子树
printf("%c ",T->data);//输出根节点
InOrderTraverse(T->rchild);//递归访问右子树
}
}
//二叉树后序遍历
int PostOrderTraverse(BiTree T){
if(T==NULL)
return OK;
else{
PostOrderTraverse(T->lchild);//递归遍历左子树
PostOrderTraverse(T->rchild);//递归访问右子树
printf("%c ",T->data);//输出根节点
}
}
//计算二叉树结点总数
double NodeCount(BiTree T)
{
if(T==NULL)
return 0;
else
return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}
//二叉树深度
double Depth(BiTree T)
{
int m,n;
if(T==NULL)
return 0;
m=Depth(T->lchild);
n=Depth(T->rchild);
if(m>n)
return(m+1);
else
return(n+1);
}
void main()
{
BiTree T;
printf("请按照先序遍历的顺序输入二叉树元素,其中左右孩子为空时,用#代替:\n");
CreateBiTree(T);
printf("以中序遍历的顺序输出二叉树元素:\n");
InOrderTraverse(T);
printf("\n");
printf("以后序遍历的顺序输出二叉树元素:\n");
PostOrderTraverse(T);
printf("\n");
double a,b;//用a来表示二叉树的深度,b来表示二叉树结点的个数
a=Depth(T);
b=NodeCount(T);
if(b==pow(2,a)-1)
printf("该二叉树为满二叉树\n");
else
printf("该二叉树不是满二叉树\n");
system("pause");
}
erchshu二叉树
最新推荐文章于 2024-07-10 17:26:25 发布