二叉树

作者: HanMeng | 来源:发表于2018-02-08 20:34 被阅读0次

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

    }

    相关文章

      网友评论

          本文标题:二叉树

          本文链接:https://www.haomeiwen.com/subject/jxhxtftx.html