#include<stdio.h> #include<stdlib.h> typedef char elementType;缓存
typedef struct TreeNode{函数
elementType data; struct TreeNode *left; struct TreeNode *right;
} Node,*BNode;code
// 定义树先序建立函数内存
void CreatTree(BNode *Root) {element
// 用于下面存放数据,输入多个字符,每次只取一个,其他的缓存在键盘的缓冲区 char val=getchar();get
// 若是输入'*',则指向为空 if (val == '*') (*Root) = NULL; // 若是输入非'*',则给数据域赋值 else { (*Root) = (BNode)malloc(sizeof(Node)); // 申请内存空间 if ((*Root) == NULL) { printf("建立节点失败"); exit(-1); } else { (*Root)->data = val; // 给节点数据域赋值 CreatTree(&(*Root)->left); printf("建立左子树\n"); CreatTree(&(*Root)->right); printf("建立右子树\n"); } }
}it
//先序遍历 void preOrder(BNode head){io
//若是遇到空,带表这个树遍历完成 if(head==NULL){ return; }else{ //先打印根节点 printf("%-3c",head->data); //遍历左子树 preOrder(head->left); //遍历右子树 preOrder(head->right);
} }ast
//中序遍历二叉树
void centerOrder(BNode head){
//若是遇到空,带表这个树遍历完成 if(head==NULL){ return; }else{ //遍历左子树 preOrder(head->left); //遍历根节点 printf("%-3c",head->data); //遍历右子树 preOrder(head->right);
} }
//后序遍历
void lastOrder(BNode head){
//若是遇到空,带表这个树遍历完成 if(head==NULL){ return; }else{ //遍历左子树 preOrder(head->left); //遍历右子树 preOrder(head->right); //先打印根节点 printf("%-3c",head->data);
} }
//1求二叉树的高度
int height(BNode head){
int left=0; int right=0; if(head==NULL) return 0; left = height(head->left); right = height(head->right); return left>right?left+1:right+1;
}
//求叶子节点的个数
int count_leaf(BNode head){
if(head==NULL) return 0; if(head->left==NULL&&head->right==NULL) return 1; return count_leaf(head->left)+count_leaf(head->right);
}
int main(){
BNode p; CreatTree(&p); preOrder(p); centerOrder(p); lastOrder(p); int x=height(p); printf("%d\n",x); int leaf=count_leaf(p); printf("%d\n",leaf); return 0;
}