#include <stdio.h>
#include <stdlib.h>
int num[10]={1,9,6,78,34,66,89,90,12,7};//定义要插入的树的元素
typedef struct Node{//定义树的节点结构数据类型,包含数据、左右儿子指针
int data;
struct Node *left,*right;
}Node;
Node* insertNode(Node* node,int data){//往树节点插入数据
if(node==NULL){//如果树根节点为空,就新建一个树根节点
node=(Node*)malloc(sizeof(Node));//申请节点空间
node->data=data;//将传入的数值赋值给节点的data
node->right=NULL;//右儿子节点指针为空
node->left=NULL;//左儿子节点返回为空
return node;//返回新建的根节点
}else if(data==node->data){//如果传入的数据和树根节点相等,则什么也不干,或者直接返回node
//什么也不干
//return node;
}else if(data<node->data){//如果传入的数据比根节点小,则往根节点的左儿子节点插入数据
node->left=insertNode(node->left,data);//将左儿子节点视为子树的树根,递归调用插入数据操作,新建节点的地址赋值给根节点的左儿子指针
}else if(data>node->data){//如果传入的数据比根节点大,则往根节点的右儿子节点插入数据
node->right=insertNode(node->right,data);//将右儿子节点视为子树的树根,递归调用插入数据操作,新建节点的地址赋值给根节点的右儿子指针
}
return node;
}
void inOrder(Node* node){//中序遍历排序二叉树
if(node==NULL)return;//空树则直接返回
inOrder(node->left);//先遍历左子树
printf("%d\t",node->data);//输出根节点
inOrder(node->right);//遍历右子树
}
int main() {
Node* node=NULL;//新建一个树的空节点
for(int i=0;i<10;i++){
printf("第%d次插入的元素为:%d\n",i+1,num[i]);
node=insertNode(node,num[i]);//往空节点依次插入10个元素
}
inOrder(node);//中序遍历排序二叉树
return 0;
}
程序输出结果为:
第1次插入的元素为:1
第2次插入的元素为:9
第3次插入的元素为:6
第4次插入的元素为:78
第5次插入的元素为:34
第6次插入的元素为:66
第7次插入的元素为:89
第8次插入的元素为:90
第9次插入的元素为:12
第10次插入的元素为:7
1 6 7 9 12 34 66 78 89 90