C语言实现二叉树的创建

一、原理

  运用冒泡排序预处理数组。运用递归,搜索是否元素已经存在,若不存在就创建新节点,将数据写入。最后运用递归实现二叉树的中序遍历测试二叉树是否创建成功。

二、代码实现

#include "stdio.h" 
#include "stdlib.h"
#define len 10
typedef struct Node{
	int data;
	struct Node *left;
	struct Node *right;
}Node;

void order(int array[]){
	int tag=0; //用于冒泡排序算法优化; 
	for(int i=0;i<len;i++){
		
		for(int j=0;j<len-i-1;j++){
			if(array[j]>array[j+1]){
				tag=1;//标记元素发生交换; 
				int temp=array[j];
				array[j]=array[j+1];
				array[j+1]=temp;
			}//元素交换; 
		}//冒泡排序; 
		
		if(tag==0){
			break;
		}//未发生元素交换,原数组有序,排序提前结束;
		 
	}
}//用于优化树(冒泡排序);

Node *Write(int data){
	Node *New=(Node *)malloc(sizeof(Node));//分配内存;
	 
	New->data =data;//写入数据;
	 
	New->left=NULL;
	New->right=NULL;//节点初始化;
	 
	return New;//返回新节点;
	 
}//创建新节点,写入数据; 

void Tree_grow(Node *root,int data){
	if(root->data<data){//处理左子树;
	 
		if(root->left==NULL){//未找到数据,增加左子树; 
			root->left=Write(data);
			
		}else{//未找到数据,继续向左递归搜索; 
			Tree_grow(root->left,data);
		}
		
	}else if(root->data>data){//处理右子树; 
	
		if(root->right==NULL){//未找到数据,增加右子树; 
			root->right=Write(data);
			
		}else{//未找到数据,继续向右递归搜索; 
			Tree_grow(root->right,data);
		}
		
	}else if(root->data==data){//数据已存在; 
		printf("The element is already there!\n");
	}
}

void Output(Node *root){
	if(root!=NULL){
		Output(root->left);
		printf("%d\n",root->data);		
		Output(root->right);
	}
}//树的遍历输出(中序遍历); 

int main(void){
	
	int array[]={5,4,6,3,7,2,8,1,9};//原始数组; 
	
	Node *root=Write(array[0]);//初始化根节点; 
	
	order(array);//排序,用于优化二叉树;
		
	for(int i=1;i<len/2;i++){
		Tree_grow(root,array[len/2-i]);
		Tree_grow(root,array[len/2+i]);
	}//数据写入;
	 
	Output(root);//测试
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值