二叉树
二叉树(binary tree)是一棵树,其中每个节点都不能有多于两个的儿子。
// 3(0)
// 5(1) 8(2)
// 2(3) 6(4) 9(5) 7(6)
#include<stdio.h>
#define size 10
typedef struct{
int data[size];
//int s;//记录整个数组的大小
}tree;
void init_Tree(tree *t,int root){//初始化树,令树中的数组每个元素都为0
int i;
for(i=0;i
t->data[i]=0;
}
t->data[0]=root;
}
int search_Tree(tree *t,int nodeIndex){
//树的查找,nodeIndex代表将要查找树的数组下标
if(nodeIndex<0||nodeIndex>=size){
printf("没有该元素,查找失败\n");
return 0;
}
if(t->data[nodeIndex]==0){
printf("该节点没有意义\n");
return 0;
}
return t->data[nodeIndex];
}
_Bool add_Tree(tree *t,int nodeIndex,int lor,int x){
//nodeIndex代表将要插入树的数组下标,x为将要插入元素的值
if(nodeIndex<0||nodeIndex>=size){
printf("没有该元素,插入失败\n");
return 0;
}
if(t->data[nodeIndex]==0){
printf("该节点没有意义,插入失败\n");
return 0;
}
if(0==lor){//插入左孩子
if(nodeIndex*2+1<0||nodeIndex*2+1>=size){
printf("没有该元素,插入失败\n");
return 0;
}
if(t->data[nodeIndex*2+1]!=0){
printf("该节点没有意义,插入失败\n");
return 0;
}
t->data[nodeIndex*2+1]=x;
}
if(1==lor){//插入右孩子
if(nodeIndex*2+2<0||nodeIndex*2+2>=size){
printf("没有该元素,插入失败\n");
return 0;
}
if(t->data[nodeIndex*2+2]!=0){
printf("该节点没有意义,插入失败\n");
return 0;
}
t->data[nodeIndex*2+2]=x;
}
return 1;
}
_Bool delete_Tree(tree *t,int nodeIndex,int *n){//删除节点
if(nodeIndex<0||nodeIndex>=size){
printf("没有该元素,删除失败\n");
return 0;
}
if(t->data[nodeIndex]==0){
printf("该节点没有意义,删除失败\n");
return 0;
}
*n=t->data[nodeIndex];
t->data[nodeIndex]=0;
return 1;
}
void travel_Tree(tree *t){//遍历树,其实就是遍历数组
int i;
for(i=0;i
printf("%d,",t->data[i]);
}
}
int main(){
tree t;
int root=3;
init_Tree(&t,root);
int node1=5;
int node2=8;
add_Tree(&t,0,0,node1);
add_Tree(&t,0,1,node2);
int node3=2;
int node4=6;
add_Tree(&t,1,0,node3);
add_Tree(&t,1,1,node4);
int node5=9;
int node6=7;
add_Tree(&t,2,0,node5);
add_Tree(&t,2,1,node6);
int n=0;
delete_Tree(&t,6,&n);
printf("%d\n",n);
travel_Tree(&t);
printf("\n");
printf("%d\n",search_Tree(&t,2));
return 0;
}