c實現二叉樹

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

}

相關文章
相關標籤/搜索