• 北邮2012机试题二叉排序树


    题目描述:

            二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树:


            1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值;
            2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值;
            3. 左、右子树本身也是一颗二叉排序树。


      现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。

    输入:

    输入包含多组测试数据,每组测试数据两行。
    第一行,一个数字N(N<=100),表示待插入的节点数。
    第二行,N个互不相同的正整数,表示要顺序插入节点的关键字值,这些值不超过10^8。

    输出:

    输出共N行,每次插入节点后,该节点对应的父亲节点的关键字值。

    样例输入:
    5
    2 5 1 3 4
    样例输出:
    -1
    2
    2
    5
    3


    #include<cstdio>
    struct node{
        node *lchild;
        node *rchild;
        int r;
    }tree[109];
    
    int loc;
    
    node *create()
    {
        tree[loc].lchild = tree[loc].rchild = NULL;
        return &tree[loc ++];
    }
    
    node *build(node *t, int x)
    {
        if(t == NULL)
        {
            t = create();
            t -> r = x;
            return t;
        }
        else
        {
            if(t -> r < x)
            {
                if(t -> rchild == NULL)
                    printf("%d",t -> r);
                t -> rchild = build(t -> rchild, x);
            }
            if(t -> r > x)
            {
                if(t -> lchild == NULL)
                    printf("%d",t -> r);
                t -> lchild = build(t -> lchild ,x);
            }
            return t;
        }
    }
    
    int main()
    {
        int n;
        while(scanf("%d",&n) != EOF)
        {
            loc = 0;
            node *t = NULL;
            int x;
            scanf("%d",&x);
            t = build(t,x);
            printf("-1\n");
            for(int i = 1; i < n; i ++)
            {
                scanf("%d",&x);
                t = build(t,x);
                printf("\n");
            }
        }
        return 0;
    }
  • 相关阅读:
    数据库 | 建表常用语句
    心得 | 撰写项目申报书
    工具 | 时间转化
    SpringBoot | 启动异常 | 显示bulid success 无 error信息
    120. 三角形最小路径和
    63. 不同路径 II
    SpringBoot | Velocity template
    SpringBoot | quartz | @DisallowConcurrentExecution
    SpringBoot | Hibernate @Transient 注解
    Java | 基础归纳 | 静态方法与实例方法的区别
  • 原文地址:https://www.cnblogs.com/lgy6534588/p/3000840.html
Copyright © 2020-2023  润新知