PAT-1099(Build A Binary Search Tree)
题目见这里
(分析) 分四步进行:
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)的更多相关文章
- 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 ...
- PAT 1099. Build A Binary Search Tree (树的中序,层序遍历)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- PAT甲级——1099 Build A Binary Search Tree (二叉搜索树)
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90701125 1099 Build A Binary Searc ...
- pat 甲级 1099. Build A Binary Search Tree (30)
1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...
- 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 ...
- 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 ...
- PAT 甲级 1099 Build A Binary Search Tree
https://pintia.cn/problem-sets/994805342720868352/problems/994805367987355648 A Binary Search Tree ( ...
- 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 ...
- 1099. Build A Binary Search Tree (30)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- 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 ...
随机推荐
- StringBuffer类的使用
//简单记录下Java中StringBuffer类的基本功能使用public class Test01{ public static void main(String[] args){ //New一个 ...
- 2017PHP程序员的进阶之路
2017PHP程序员的进阶之路 又是一年毕业季,可能会有好多毕业生即将进入开发这个圈子,踏上码农这个不归路.根据这些年在开发圈子总结的LNMP程序猿发展轨迹,结合个人经验体会,总结出很多程序员对未来的 ...
- unity 在安卓个IOS平台上 同一个按钮 点击后实现不同的功能
#if UNITY_IOS UIEventListener.Get(mSprites["Recharge"].gameObject).onClick = OnIOSRecharge ...
- angular实现的按钮提示
用angularJS简单实现了一个小的按钮提示,html文件中需要引入jquery.js和angular.js css代码: <style type="text/css"&g ...
- 543. Diameter of Binary Tree
https://leetcode.com/problems/diameter-of-binary-tree/#/description Given a binary tree, you need to ...
- 做一枚精致的程序猿,Fighting!
这几天我和我们的团队正在做一个公司管理系统的项目,团队分工根据成员的水平高低来分工,这样看似公平,但其实不公平,如此这样一来,那些水平稍不如别人的成员就没有发展的机会?那么问题来了,对于水平稍逊色的程 ...
- 使用Windows Server 2012+ 搭建VPN 简单 高效 稳定
前几天,在机缘巧合之下,买到了一台性能配置一般的腾讯云服务器(香港的),因为性能比较差,没啥太大用途,就想着试试搭建一个VPN,后来,经过多次尝试和查资料,总结出了一套几乎100%成功的教程,现在拿来 ...
- javascript代码的小小重构
写js也有那么段时间了,也看过几本关于js的书,从最初的<锋利的jquery><高性能javasrcipt>到<javascript设计模式>等,虽然看了些书,看到 ...
- python之numpy库[1]
python-numpy python中的数据 一维数据 用列表和集合表示 数组与列表的关系 列表:数据类型可以不同 数组:数据类型可以相同 多维数据 用列表表示 高维数据 用字典表示 高维数据仅利用 ...
- jQuery 插件 的this 指向问题(实战)
daterangepicker 是一个JavaScript组件,用来选择日期. 资源直接搜索 daterangepicker 即可,当然好看的样式可以基于Bootstrap. 官网:http://ww ...