#include <stdio.h>
#include <stdlib.h>
typedef struct node * Tree;
struct node{
int Data;
Tree Left;
Tree Right;
};
Tree BulidTree1(Tree T)//先序创建二叉树
{
int item;
scanf("%d",&item);
if(item==0){
return NULL;
}else{
T=(Tree)malloc(sizeof(struct node));
T->Data=item;
T->Left=BulidTree1(T);
T->Right=BulidTree1(T);
}
return T;
}
Tree BulidTree2(Tree T)//中序序创建二叉树
{
int item;
scanf("%d",&item);
if(item==0){
return NULL;
}else{
T=(Tree)malloc(sizeof(struct node));
T->Left=BulidTree2(T);
T->Data=item;
T->Right=BulidTree2(T);
}
return T;
}
Tree BulidTree3(Tree T)//后序序创建二叉树
{
int item;
scanf("%d",&item);
if(item==0){
return NULL;
}else{
T=(Tree)malloc(sizeof(struct node));
T->Left=BulidTree3(T);
T->Right=BulidTree3(T);
T->Data=item;
}
return T;
}
void print1(Tree T)//先序遍历
{
if(T){
printf("%d ",T->Data);
print1(T->Left);
print1(T->Right);
}
}
void print2(Tree T)//中序遍历
{
if(T){
print2(T->Left);
printf("%d ",T->Data);
print2(T->Right);
}
}
void print3(Tree T)//后序遍历
{
if(T){
print3(T->Left);
print3(T->Right);
printf("%d ",T->Data);
}
}
int highTree(Tree T)//二叉树的高度
{
int HL,HR,H;
if(T){
HL=highTree(T->Left);
HR=highTree(T->Right);
H=HR>HL?HR:HL;
return (H+1);
}else{
return 0;
}
}
void PrintLeavece(Tree T)//输出二叉树的叶节点
{
if(T){
if(!T->Left&&!T->Right){
printf("%d\n",T->Data);
}
PrintLeavece(T->Left);
PrintLeavece(T->Right);
}
}
int main()
{
Tree T;
int N;
T=BulidTree3(T);
N=highTree(T);
printf("H=%d\n",N);
PrintLeavece(T);
print1(T);
return 0;
}
二叉树
最新推荐文章于 2022-05-01 12:47:37 发布