#include<stdio.h>
#include<stdlib.h>
#define ElementType char
//定义树节点
typedef struct Node{
ElementType data;
struct Node *lchild;
struct Node *rchild;
};
//创建一个二叉树 ,先序顺序创建
Node* Create(){
ElementType data;
data = getchar();
Node *T;
if(data=='#'){
T = NULL;
}
else{
T = (Node*)malloc(sizeof(Node));
T->data = data;
T->lchild = Create();
T->rchild = Create();
}
return T;
}
//先序遍历
void PreOrder(Node *T){
if(T){
printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
//中序遍历
void InOrder(Node *T){
if(T){
printf("%c",T->data);
InOrder(T->lchild);
InOrder(T->rchild);
}
}
//后序遍历
void PostOrder(Node *T){
if(T){
printf("%c",T->data);
PostOrder(T->lchild);
PostOrder(T->rchild);
}
}
//求叶节点数
int LeafSum(Node *T){
int sum;
if(T){
if(!(T->lchild)&&!(T->rchild)){
return 1;
}
return LeafSum(T->lchild)+LeafSum(T->rchild);
}
return 0;
}
//求二叉树深度
int TreeDep(Node *T){
int dep = 0;
int ldep;
int rdep;
if(T){
dep = 1;
ldep = TreeDep(T->lchild);
rdep = TreeDep(T->rchild);
dep += ldep>rdep?ldep:rdep;
return dep;
}
return 0;
}
main(){
Node *tree;
tree = Create();
PreOrder(tree);
printf("\n");
printf("The sum of Leaf Node:%d",LeafSum(tree));
printf("\n");
printf("Tree Depth:%d",TreeDep(tree));
}
//测试二叉树
//ABD##E##CF###
二叉树的建立和遍历
最新推荐文章于 2019-11-28 12:38:44 发布