实现功能如下:
1、 创建二叉链表(可以自己随手画个二叉树,依此建立)
2、 求出其先序中序后序和层序遍历序列。
3、 求出其树高
4、 输出所有叶子结点。
#include<stdio.h>
#include<stdlib.h>
typedef struct BinTNode{
char data;
BinTNode *lchild,*rchild;
}BinNode,*BinTree;
void CreateBinTree(BinTree *T){
char ch;
ch = getchar();
getchar(); // 吞掉回车
if (ch == '#') {
*T = NULL;
} else {
*T = (BinTree)malloc(sizeof(BinNode)); // 生成根节点
if (!*T) exit(-1); //避免内存分配失败
(*T)->data = ch;
CreateBinTree(&((*T)->lchild));
CreateBinTree(&((*T)->rchild));
}
}
void PreOrderTraverse(BinTree T){
//先序遍历
if(T){
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BinTree T){//中序遍历
if(T){
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BinTree T){//后序遍历
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
//树的深度
int Depth(BinTree T){
if(T==NULL)
return 0;
else{
int m,n;
m=Depth(T->lchild);
n=Depth(T->rchild);
if(m>n)return (m+1);
else return (n+1);
}
}
//树的结点数
int NodeCount(BinTree T){
if(T==NULL)
return 0;
else{
return (NodeCount(T->lchild)+NodeCount(T->rchild)+1);
}
}
int LeadCount(BinTree T){
if (T == NULL)
return 0;
if (T->lchild == NULL && T->rchild == NULL)
return 1;
else
return LeadCount(T->lchild) + LeadCount(T->rchild);
}
int main(){
BinTree T;
CreateBinTree(&T);//头指针
printf("先序遍历:");
PreOrderTraverse(T);
printf("\n中序遍历:");
InOrderTraverse(T);
printf("\n后序遍历:");
PostOrderTraverse(T);
printf("\n本二叉树的深度是:%d\t 结点个数是:%d\t 叶子结点的个数是:%d",Depth(T),NodeCount(T),LeadCount(T));
return 0;
}