二叉排序树数组实现

来源:互联网 发布:hp扫描软件 编辑:程序博客网 时间:2024/06/10 01:51

定义left[], right[]作为标记,记录但前节点是哪个点的左(右)孩子

比如我们要对 4,3, 8,6,1。排序排好序后的二叉树如图:

把这个过程在纸上用笔走一遍,你就会一目了然。


#include <stdio.h>#include <string.h>#define N 1000int l[N], r[N], key[N], flag, root;void insert(int index, int x){    if(x <= key[index])    {        if(l[index] == -1)    l[index] = flag;        else    insert(l[index], x);    }    else    {        if(r[index] == -1)    r[index] = flag;        else    insert(r[index], x);    }}void InOrder(int index){    if(l[index] != -1)    InOrder(l[index]);    printf("%d ", key[index]);    if(r[index] != -1)    InOrder(r[index]);}int main(){    int i, x, n;    memset(l, -1, sizeof(l));    memset(r, -1, sizeof(r));    scanf("%d", &n);    root = -1;    flag = 0;    for(i = 0; i < n; i++)    {        scanf("%d", &x);        if(root == -1)    key[++root] = x;        else        {            key[++flag] = x;            insert(root, x);        }    }    InOrder(root);    return 0;}


0 0
原创粉丝点击