zoukankan      html  css  js  c++  java
  • 九度oj 题目1467:二叉排序树

    题目描述:

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


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


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

    输入:

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

    输出:

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

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

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <string>
     5 #define N 109
     6 
     7 struct Node
     8 {
     9     int key;
    10     int left;
    11     int right;
    12 };
    13 
    14 int tree[N];
    15 Node treeNode[N];
    16 
    17 int main(int argc, char const *argv[])
    18 {
    19     int n;
    20     while(scanf("%d",&n) != EOF) {
    21         for(int i = 0; i < n; i++) {
    22             scanf("%d",&tree[i]);
    23         }
    24         treeNode[0].key = tree[0];
    25         treeNode[0].left = -1;
    26         treeNode[0].right = -1;
    27 
    28         printf("%d
    ",-1);
    29         for(int i = 1; i < n; i++) {
    30             treeNode[i].key = tree[i];
    31             treeNode[i].left = -1;
    32             treeNode[i].right = -1;
    33             int lastTemp = -1;
    34             int temp = 0;
    35             bool dir = false;
    36             while(temp != -1) {
    37                 if(tree[i] < treeNode[temp].key) {
    38                     lastTemp = temp;
    39                     temp = treeNode[temp].left;
    40                     dir = false;
    41                 }
    42                 else {
    43                     lastTemp = temp;
    44                     temp = treeNode[temp].right;
    45                     dir = true;
    46                 }
    47             }
    48             if(dir == false) {
    49                 treeNode[lastTemp].left = i;
    50             }
    51             else {
    52                 treeNode[lastTemp].right = i;
    53             }
    54             
    55             printf("%d
    ",tree[lastTemp]);
    56             
    57         }
    58 
    59     }
    60     return 0;
    61 }

    利用数组模拟一棵树,1A

  • 相关阅读:
    向内的寻找
    了解潜意识
    NOI2014 Day1
    NOI2011 Day1
    NOI2012 Day2
    NOI2012 Day1
    NOI2013 Day2
    NOI2013 Day1
    拉格朗日乘数法
    NOI2015 Day2
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5684388.html
Copyright © 2011-2022 走看看