二叉树

2018-02-08  本文已影响0人  HanMeng

二叉树(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;

}

上一篇下一篇

猜你喜欢

热点阅读