• 二叉排序树(水题)


    二叉排序树

    时间限制:1 秒

    内存限制:128 兆

    特殊判题:

    提交:3829

    解决:1540

    题目描述:

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

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

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

    输入:

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

    输出:

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

    样例输入:
    5
    2 5 1 3 4
    样例输出:
    -1
    2
    2
    5
    3
    不多说;
    代码:
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    typedef struct Node{
        Node *l, *r;
        int v;
        Node(){
            l = NULL;
            r = NULL;
        }
    }*tree, Node;
    void insert(Node* &p, int v, int pre){
        if(p == NULL){
            p = new Node();
            p->v = v;
            printf("%d
    ", pre);
            return;
        }
        if(v < p->v)insert(p->l, v, p->v);
        else insert(p->r, v, p->v);
    }
    int main(){
        int N;
        while(~scanf("%d", &N)){
            tree p;
            p = NULL;
            int v;
            for(int i = 0; i < N; i++){
                scanf("%d", &v);
                insert(p, v, -1);
            }
        }
        return 0;
    }
  • 相关阅读:
    Ubuntu 20.04下EasyConnect兼容性问题临时解决方案
    Ubuntu 20.04 LTS安装搜狗输入法,只需三条命令,还能自动更新
    Java笔记: 继承成员覆盖和隐藏
    Java扫雷游戏: JMine
    Emacs: 设置窗口标题格式
    Java笔记: protected的真正含义
    Java笔记: 初始化块
    Ubuntu跨版本安装软件
    百度编辑器 Ueditor 增加字体
    AspCms 升级百度编辑器
  • 原文地址:https://www.cnblogs.com/handsomecui/p/5574868.html
Copyright © 2020-2023  润新知