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;

}

相关文章
相关标签/搜索