#include <stdio.h>
#define max(x,y) (x>y)?x:y
typedef char Elementtype;
struct node{
Elementtype data;
struct node *lchild,*rchild;
};
node *BTREE;
//先序序列建立二叉树
char *str="ABD*G***CE**F**";
void CreatePreOrder(node* &root){
char ch=*str;
*str++;
if(ch=='*'){
root=NULL;
return;
}
root=new node;
root->data=ch;
CreatePreOrder(root->lchild);
CreatePreOrder(root->rchild);
return;
}
//先序序列输出二叉树
void printPreOrder(node* &T){
if(T==NULL)
return;
printf("%c ",T->data);
printPreOrder(T->lchild);
printPreOrder(T->rchild);
return;
}
//中序序列输出二叉树
void printInOrder(node* &T){
if(T==NULL)
return;
printInOrder(T->lchild);
printf("%c ",T->data);
printInOrder(T->rchild);
return;
}
//后序序列输出二叉树
void printPostOrder(node* &T){
if(T==NULL)
return;
printPostOrder(T->lchild);
printPostOrder(T->rchild);
printf("%c ",T->data);
return;
}
int num=0;
//二叉树结点的个数
void Count(node* &T){
if(T==NULL)
return;
++num;
Count(T->lchild);
Count(T->rchild);
return;
}
//打印二叉树中的叶子结点,前序
void printLeafNodeProOrder(node* &T){
if(T==NULL)
return;
if(T->lchild==NULL&&T->rchild==NULL){
printf("%c ",T->data);
return;
}
printLeafNodeProOrder(T->lchild);
printLeafNodeProOrder(T->rchild);
return;
}
//二叉树的深度
int Depth(node* &T){
if(T==NULL)
return 0;
int dl=Depth(T->lchild);
int dr=Depth(T->rchild);
return max(dl,dr)+1;
}
int main()
{
CreatePreOrder(BTREE);
printf("先序序列输出二叉树:");
printPreOrder(BTREE);
printf("\n中序序列输出二叉树:");
printInOrder(BTREE);
printf("\n后序序列输出二叉树:");
printPostOrder(BTREE);
Count(BTREE);
printf("\n二叉树结点的个数:%d",num);
printf("\n打印二叉树中的叶子结点,前序 : ");
printLeafNodeProOrder(BTREE);
printf("\n二叉树的深度 : %d",Depth(BTREE));
return 0;
}
二叉树 建立 遍历 计算深度 计算节点个数
最新推荐文章于 2022-04-30 22:14:42 发布