九度oj 题目1467:二叉排序树

摘要:
可以是一颗空树,也可以是一颗具有如下特性的非空二叉树:1.若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值;2.若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值;3.左、右子树本身也是一颗二叉排序树。
题目描述:

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

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 structNode
8 {
9     intkey;
10     intleft;
11     intright;
12 };
13 
14 inttree[N];
15 Node treeNode[N];
16 
17 int main(int argc, char const *argv[])
18 {
19     intn;
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

免责声明:文章转载自《九度oj 题目1467:二叉排序树》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在Excel中输入特殊字符使用Docker搭建MySQL主从复制(一主一从)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

STM32驱动模数转换芯片ADS1120(PT100铂电阻测温度)第2篇

1. 先看下原理图,原理图是电流从IDAC1流出,提供驱动,然后R(REF)这个电阻上的电压作为参考,读取AIN0和AIN1的电压,那么可以测量出来电阻值。 2. 上图是官方给出的参考,下图是我实际用的原理图,其中PT100的是在0摄氏度的时候,是100欧姆,上升1摄氏度,电阻增加0.385欧姆 3. 那么代码部分是,初始化,下面代码用的是TI官网下载...

CCF-201509-2-日期计算

问题描述 试题编号: 201509-2 试题名称: 日期计算 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   给定一个年份y和一个整数d,问这一年的第d天是几月几日?   注意闰年的2月有29天。满足下面条件之一的是闰年:   1) 年份是4的整数倍,而且不是100的整数倍;   2) 年份是400的整...

(java实现)杭电oj 2034 人见人爱A-B

人见人爱A-B Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 68543Accepted Submission(s): 19203 Problem Description 参加过上个月月赛的同学一定还记得...

oj测试点相关 (整理摘编)

Accepted                            通过!(AC) Wrong Answer                    答案错。(WA) Runtime Error                          程序运行出错,意外终止等。(RE) Time Limit Exceeded               超时...

代码题(50)— 字符串的排列

1、字符串排列 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 (1)交换元素位置 classSolution { public: vector<string> Permutation(stringstr)...

web_reg_save_param_ex简介

Save Offset 设置关联的内容偏移量,从第几位开始进行关联操作。回到最开始的例子,我们抓取的是You have successfully installed XAMPP on this system!,如果需要获得successfully installed XAMPP on this system!这个字符串,则不用改变左边界,只需要设置Sav...