二叉树

来源:互联网 发布:使命召唤ol辅助淘宝 编辑:程序博客网 时间:2024/06/12 17:15
#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;}

0 0