【九度OJ】题目1201:二叉排序树 解题报告

标签(空格分隔): 九度OJ


http://ac.jobdu.com/problem.php?pid=1201

题目描述:

输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。

输入:

输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。

输出:

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。

样例输入:

5
1 6 5 9 8

样例输出:

1 6 5 9 8
1 5 6 8 9
5 8 9 6 1

 提示:

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

Ways

考察BST。

首先,BST的先,中,后遍历是很容易的。

难点在构造BST,采用提前生成所有元素,然后再填充的方式。注意insert函数的巧妙的地方。另外insert函数一直返回的都是BST的最顶层的元素。

程序里的三行注释都是我出错的地方,希望以后注意。

#include <stdio.h>
#include <string.h> struct Node {
Node *lchild;
Node *rchild;
int c;
} Tree[110]; int loc; Node *creat() {
Tree[loc].lchild = Tree[loc].rchild = NULL;
return &Tree[loc++];
} void preOrder(Node *T) {
printf("%d ", T->c);
if (T->lchild != NULL) {
preOrder(T->lchild);
}
if (T->rchild != NULL) {
preOrder(T->rchild);
}
} void inOrder(Node *T) {
if (T->lchild != NULL) {
inOrder(T->lchild);
}
printf("%d ", T->c);
if (T->rchild != NULL) {
inOrder(T->rchild);
}
} void postOrder(Node *T) {
if (T->lchild != NULL) {
postOrder(T->lchild);
}
if (T->rchild != NULL) {
postOrder(T->rchild);
}
printf("%d ", T->c);
} Node *insert(Node *T, int x) {
if (T == NULL) {
T = creat();
T->c = x;
return T;
} else if (x < T->c) {
T->lchild = insert(T->lchild, x);
} else if (x > T->c) {
T->rchild = insert(T->rchild, x);
}
return T;
} int main() { int n;
while (scanf("%d", &n) != EOF) {
Node *T = NULL;//在循环体里初始化
loc = 0;//这行忘记之后,过多的测试用例导致Tree指针溢出
for (int i = 0; i < n; i++) {
int temp;
scanf("%d", &temp);
T = insert(T, temp);//必须把返回值赋给T
}
preOrder(T);
printf("\n");
inOrder(T);
printf("\n");
postOrder(T);
printf("\n");
}
return 0;
}

Date

2017 年 3 月 5 日

【九度OJ】题目1201:二叉排序树 解题报告的更多相关文章

  1. 九度oj 题目1201:二叉排序树

    题目描述: 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历. 输入: 输入第一行包括一个整数n(1<=n<=100).    接下来的一行包括n个整数. 输出: 可能有多组测试 ...

  2. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  3. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  5. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  6. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  7. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  8. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  9. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

  10. 九度OJ题目1003:A+B

    while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...

随机推荐

  1. 【基因组注释】GMAP安装使用问题

    homology策略预测基因结构,下载了公共mRNA/CDS序列,考虑用gmap比对.本来是个很简单的脚本,但总是不那么顺利. 无论是用conda安装,还是源码安装较新版本,都存在问题. gmap_b ...

  2. SR4R数据库:水稻4个SNP集的筛选及其应用

    目录 前言 四个SNP集 hapmapSNPs tagSNPs fixedSNPs barcodeSNPs hapmapSNPs的指标统计 tagSNPs的群体结构验证 tagSNPs的遗传多样性 t ...

  3. 【百奥云GS专栏】1-全基因组选择介绍

    目录 什么是基因组选择? 基因组选择技术的发展 基因组选择的原理和流程 基因组选择的模型 基因组选择的展望 参考资料 什么是基因组选择? 基因组选择(Genomic Selection,简称GS)这一 ...

  4. Python基础笔记4

    模块 模块是一组Python代码的集合,一个.py文件就称之为一个模块(Module),按目录来组织模块称为包(Package).优点:提高了代码的可维护性:避免函数名和变量名冲突. mycompan ...

  5. Docker Error response from daemon,Docker 换镜像

    Docker换镜像,Docker  pull.Docker search 失败出现以下错误 Error response from daemon: Get https://index.docker.i ...

  6. 变量、内存区域、MDK文件(map、htm)

    变量分为:局部变量和全局变量 局部变量:函数体内部定义的变量,作用域为函数内部,static声明(静态局部变量)该变量则函数调用结束后不消失而保留值,分配的存储空间不释放. 全局变量:函数体外部定义的 ...

  7. .NET SAAS 架构与设计 -SqlSugar ORM

    1.数据库设计 常用的Saas分库分为2种类型的库 1.1 基础信息库 主要存组织架构 .权限.字典.用户等 公共信息 性能优化:因为基础信息库是共享的,所以我们可以使用 读写分离,或者二级缓存来进行 ...

  8. c#表格序号列

    <asp:BoundField HeaderText="序号" /> OnRowCreated="gridview_RowCreated" prot ...

  9. 利用extern共享全局变量

    方法: 在xxx.h中利用extern关键字声明全局变量 extern int a; 在xxx.cpp中#include<xxx.h> 再定义 int a; 赋不赋初值无所谓,之后该全局变 ...

  10. 【Linux】【Shell】【Basic】变量与数据类型

    1. 变量: 1.1. 局部变量:作用域是函数的生命周期:在函数结束时被自动销毁: 定义局部变量的方法:local VARIABLE=VALUE 1.2. 本地变量:作用域是运行脚本的shell进程的 ...