zoukankan      html  css  js  c++  java
  • 二叉排序树(水题)

    二叉排序树

    时间限制: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;
    }
  • 相关阅读:
    django基础入门(3)django中模板
    ms sql 索引(一)
    Ruby入门(3)——方法、代码段
    Ruby入门(2)——基本流程控制
    Ruby入门(4)——类
    Ruby入门(1)——数据类型
    django基础入门(1)django基本配置
    四则运算加强版
    结对 四则运算
    chrome设置以及hosts备份
  • 原文地址:https://www.cnblogs.com/handsomecui/p/5574868.html
Copyright © 2011-2022 走看看