#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;
}