题目见这里

(分析) 分四步进行:

1)根据给定的结点情况建二叉树  2)对输入的键值排序(asending) 3)对二叉树中序遍历,同时对应赋key值 4)层次遍历(队列应用)

题目并不困难,但是我误入了trick,错误假定了结点按先序遍历是按顺序编号的(当然是受样例的影响),所以有了下面22分(满分30) 的submit(贴出来是因为这不失为好的巩固二叉树知识的程序)

#include <stdio.h>
#include <stdlib.h> //qsort,malloc
#define N 105 typedef struct node{
int data;
struct node *lChild,*rChild;
}BiNode,*BiTree; void CreatBiTree(BiTree *bt){
(*bt) = (BiTree)malloc(sizeof(BiNode));
(*bt)->lChild = (*bt)->rChild = NULL;
int left,right;
scanf("%d%d",&left,&right);
if(left!=-1) CreatBiTree(&((*bt)->lChild));
if(right!=-1) CreatBiTree(&((*bt)->rChild));
} int cmp(const void *a, const void *b){ //asending
return *(int *)a - *(int *)b;
} void Sort(int *key, int n){
int i;
for(i=0;i<n;i++)
scanf("%d",&key[i]);
qsort((void*)key,n,sizeof(key[0]),cmp);
} void LDR(BiTree bt, int key[]){
static int i = 0;
if(bt){
LDR(bt->lChild,key);
bt->data = key[i++];
LDR(bt->rChild,key);
}
} void LOT(BiTree bt){
BiTree q[N],bNode;
int front,rear,flag;
rear = front = flag = 0;
q[rear] = bt;
while(front<=rear){
bNode = q[front++];
if(!flag){
printf("%d",bNode->data);
flag = 1;
}
else printf(" %d",bNode->data);
if(bNode->lChild) q[++rear] = bNode->lChild;
if(bNode->rChild) q[++rear] = bNode->rChild;
}
printf("\n");
} void DestryBiTree(BiTree *bt){
if(*bt){
DestryBiTree(&((*bt)->lChild));
DestryBiTree(&((*bt)->rChild));
free(*bt);
}
} int main(){
int key[N];
BiTree bt;
int n;
// freopen("Data.txt","r",stdin);
scanf("%d",&n);
CreatBiTree(&bt,n);
Sort(key,n);
LDR(bt,key); //中序遍历
LOT(bt); //层次遍历
DestryBiTree(&bt);
return 0;
}

  当然,既然认识到这个错误,当然是因为找到了反例:

8
  7 1
  2 3
  -1 -1
  -1 4
  5 6
  -1 -1
  -1 -1
  -1 -1
  33 37 34 30 50 43 37 33

从上面的反例中,我们注意到创建链表形式的二叉树是不太可能的,而应采用数组形式,所以有了AC的提交:

#include <stdio.h>
#define N 105 typedef struct{
int lChild,rChild;
int data;
}Node; void CreatBiTree(Node node[], int n){
int i = 0;
for(;i<n;i++) scanf("%d%d",&node[i].lChild,&node[i].rChild);
} int cmp(const void *a, const void *b){ //asending
return *(int *)a - *(int *)b;
} void Sort(int *key, int n){
int i;
for(i=0;i<n;i++)
scanf("%d",&key[i]);
qsort((void*)key,n,sizeof(key[0]),cmp);
} void LDR(Node *node, int key[], int i){
static int j = 0;
if(node[i].lChild!=-1) LDR(node,key,node[i].lChild);
node[i].data = key[j++];
if(node[i].rChild!=-1) LDR(node,key,node[i].rChild);//注意不要写误
} void LOT(Node node[]){
Node q[N],qNode;
int front,rear;
rear = front = 0;
q[rear] = node[0];
while(front<=rear){
qNode = q[front++];
if(rear) printf(" ");
printf("%d",qNode.data);
if(qNode.lChild!=-1) q[++rear] = node[qNode.lChild];
if(qNode.rChild!=-1) q[++rear] = node[qNode.rChild];
}
printf("\n");
} int main(){
int key[N];
Node node[N];
int n;
// freopen("Data.txt","r",stdin);
scanf("%d",&n);
CreatBiTree(node,n);
Sort(key,n);
LDR(node,key,0); //中序遍历
LOT(node); //层次遍历
return 0;
}

PAT-1099(Build A Binary Search Tree)的更多相关文章

  1. PAT 1099 Build A Binary Search Tree[BST性质]

    1099 Build A Binary Search Tree(30 分) A Binary Search Tree (BST) is recursively defined as a binary ...

  2. PAT 1099. Build A Binary Search Tree (树的中序,层序遍历)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

  3. PAT甲级——1099 Build A Binary Search Tree (二叉搜索树)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90701125 1099 Build A Binary Searc ...

  4. pat 甲级 1099. Build A Binary Search Tree (30)

    1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

  5. 1099 Build A Binary Search Tree

    1099 Build A Binary Search Tree (30)(30 分) A Binary Search Tree (BST) is recursively defined as a bi ...

  6. PAT (Advanced Level) Practise - 1099. Build A Binary Search Tree (30)

    http://www.patest.cn/contests/pat-a-practise/1099 A Binary Search Tree (BST) is recursively defined ...

  7. PAT 甲级 1099 Build A Binary Search Tree

    https://pintia.cn/problem-sets/994805342720868352/problems/994805367987355648 A Binary Search Tree ( ...

  8. PAT Advanced 1099 Build A Binary Search Tree (30) [⼆叉查找树BST]

    题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...

  9. 1099. Build A Binary Search Tree (30)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

  10. PAT A1099 Build A Binary Search Tree (30 分)——二叉搜索树,中序遍历,层序遍历

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

随机推荐

  1. 1、在eclipse中导入Java的jar包方法---JDBC【图文说明】

    1.Eclipse环境下jar包导入 在Eclipse环境下编写Java程序,常常会借用到各种jar包.如:连接数据库时,导入jar包是必须的.导入方法如下: 1.打开eclipse,右击要导入jar ...

  2. SmartCoder每日站立会议06

    站立会议内容 讨论了小程序的具体实现方式,主要会加入地图这一元素,使程序看起来更加的方便直观,同时也会使人感到新颖.在对各个点的评论对话功能也在考虑中. 1. 站立会议照片: 2.任务展板 3.燃尽图

  3. jenkins+ant+jmeter html报告文件作为附件发送(ant-jmeter支持javamail)

    前言:由于ant-jmeter目前的版本不支持javamail,也就是说发送邮件时只能借助jenkins自带的发送邮件插件来发送报告. 但是jenkins发送邮件支持发送邮件内容(且有价值.有营养的内 ...

  4. jQuery对象的创建(一)

    在jQuery的常规用法中,执行"$()"返回的是一个jQuery对象,在源码中,它是这样定义的: ... var jQuery = function() { return new ...

  5. 2017-5-29 Excel VBA 小游戏

    ---恢复内容开始--- 转一个Excel VBA的小游戏,最近对excel有了更深入的了解,功能很强大,也刷新了我对待事情的态度. 一.准备界面 我们先来把游戏界面准备好,选中前4行,行高调成50, ...

  6. SVN环境搭建步骤

    方法:一.准备工作1. Subversion服务器程序先到官方网站上下载最新版本.2. TortoiseSVN客户端程序它是一个客户端程序,用来与Subvers服务端通讯.Subversion自带一个 ...

  7. 【Spark2.0源码学习】-9.Job提交与Task的拆分

          在前面的章节Client的加载中,Spark的DriverRunner已开始执行用户任务类(比如:org.apache.spark.examples.SparkPi),下面我们开始针对于用 ...

  8. ThinkPHP5.0版本和ThinkPHP3.2版本的区别

    5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别. URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规 ...

  9. Wampserver红色橙色解决思路----端口冲突是关键

    Wampserver不是绿色:wampserver下载安装不需要配置环境,在这之前需要下载tomcat,并确保启动,不然会是红色.安装好wampserver(就是在安装过程不会弹出缺少什么文件,我的就 ...

  10. 构建自己的PHP框架--构建模版引擎(2)

    自从来到新公司就一直很忙,最近这段时间终于稍微闲了一点,赶紧接着写这个系列,感觉再不写就烂尾了. 之前我们说到,拿到{{ $name }}这样一段内容时,我们只需要将它转化成<?php echo ...