二叉樹(binary tree)是一棵樹生巡,其中每個節(jié)點都不能有多于兩個的兒子碗誉。
// ???????????????? 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("該節(jié)點沒有意義\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("該節(jié)點沒有意義,插入失敗\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("該節(jié)點沒有意義,插入失敗\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("該節(jié)點沒有意義,插入失敗\n");
? ? ? ? ? ? return 0;
? ? ? ? }
? ? ? ? t->data[nodeIndex*2+2]=x;
? ? }
? ? return 1;
}
_Bool delete_Tree(tree *t,int nodeIndex,int *n){//刪除節(jié)點
? ? if(nodeIndex<0||nodeIndex>=size){
? ? ? ? printf("沒有該元素,刪除失敗\n");
? ? ? ? return 0;
? ? }
? ? if(t->data[nodeIndex]==0){
? ? ? ? printf("該節(jié)點沒有意義,刪除失敗\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;
}