1115 Counting Nodes in a BST (30 分)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:
- The left subtree of a node contains only nodes with keys less than or equal to the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
Insert a sequence of numbers into an initially empty binary search tree. Then you are supposed to count the total number of nodes in the lowest 2 levels of the resulting tree.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤1000) which is the size of the input sequence. Then given in the next line are the N integers in [−10001000] which are supposed to be inserted into an initially empty binary search tree.
Output Specification:
For each case, print in one line the numbers of nodes in the lowest 2 levels of the resulting tree in the format:
n1 + n2 = n
where n1
is the number of nodes in the lowest level, n2
is that of the level above, and n
is the sum.
Sample Input:
9
25 30 42 16 20 20 35 -5 28
Sample Output:
2 + 4 = 6
题意:求二叉查找树最低两层结点,并求出他们的和。
分析:先建树,再层序遍历求出最大层数maxlayer,遍历过程中用num数组来记录每层结点个数即可。还有一种方法是用DFS求出最大深度maxdepth,同样也用数组记录每个深度的结点个数。
/** * Copyright(c) * All rights reserved. * Author : Mered1th * Date : 2019-02-27-15.33.36 * Description : A1115 */ #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<string> #include<unordered_set> #include<map> #include<vector> #include<set> #include<queue> using namespace std; ; int a[maxn],n; int num[maxn]; struct node{ int data,layer; node* lchild; node* rchild; }; node* newNode(int v){ node* Node=new node; Node->data=v; Node->lchild=Node->rchild=NULL; return Node; } void insert(node* &root,int x){ if(root==NULL) { root=newNode(x); return; } else if(x>root->data) insert(root->rchild,x); else insert(root->lchild,x); } node* Create(int data[],int n){ node* root=NULL; ;i<n;i++){ insert(root,data[i]); } return root; } ; void BFS(node* root){ queue<node*> q; q.push(root); root->layer=; while(!q.empty()){ node* now=q.front(); q.pop(); num[now->layer]++; if(maxlayer<now->layer) maxlayer=now->layer; if(now->lchild){ now->lchild->layer=now->layer+; q.push(now->lchild); } if(now->rchild){ now->rchild->layer=now->layer+; q.push(now->rchild); } } } int main(){ #ifdef ONLINE_JUDGE #else freopen("1.txt", "r", stdin); #endif scanf("%d",&n); ;i<n;i++){ scanf("%d",&a[i]); } node* root=Create(a,n); BFS(root); printf(],num[maxlayer]+num[maxlayer-]); ; }
/** * Copyright(c) * All rights reserved. * Author : Mered1th * Date : 2019-02-06-00.18.21 * Description : A1115 */ #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<string> #include<unordered_set> #include<map> #include<vector> using namespace std; ; struct node{ int data; node* lchild; node* rchild; }; node* newNode(int v){ node* Node=new node; Node->data=v; Node->lchild=Node->rchild=NULL; return Node; } void insert(node* &root,int x){ if(root==NULL) { root=newNode(x); return; } else if(x>root->data) insert(root->rchild,x); else insert(root->lchild,x); } node* Create(int data[],int n){ node* root=NULL; ;i<n;i++){ insert(root,data[i]); } return root; } },maxdepth=-; void DFS(node* root,int depth){ if(root==NULL){ maxdepth=max(maxdepth,depth); return; } num[depth]++; DFS(root->lchild,depth+); DFS(root->rchild,depth+); } int main(){ #ifdef ONLINE_JUDGE #else freopen("1.txt", "r", stdin); #endif int n,data[maxn]; cin>>n; ;i<n;i++){ cin>>data[i]; } node* root=Create(data,n); DFS(root,); printf(],num[maxdepth-],num[maxdepth-]+num[maxdepth-]); ; }
1115 Counting Nodes in a BST (30 分)的更多相关文章
- 【PAT甲级】1115 Counting Nodes in a BST (30分)(二叉查找树)
题意: 输入一个正整数N(<=1000),接着输入N个整数([-1000,1000]),依次插入一棵初始为空的二叉排序树.输出最底层和最底层上一层的结点个数之和,例如x+y=x+y. AAAAA ...
- [二叉查找树] 1115. Counting Nodes in a BST (30)
1115. Counting Nodes in a BST (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...
- 1115. Counting Nodes in a BST (30)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- PAT Advanced 1115 Counting Nodes in a BST (30) [⼆叉树的遍历,BFS,DFS]
题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...
- PAT甲题题解-1115. Counting Nodes in a BST (30)-(构建二分搜索树+dfs)
题意:给出一个序列,构建二叉搜索树(BST),输出二叉搜索树最后两层的节点个数n1和n2,以及他们的和sum: n1 + n2 = sum 递归建树,然后再dfs求出最大层数,接着再dfs计算出最后两 ...
- PAT A 1115. Counting Nodes in a BST (30)【二叉排序树】
题目:二叉排序树,统计最后两层节点个数 思路:数组格式存储,insert建树,dfs遍历 #include<cstdio> #include<iostream> #includ ...
- PAT (Advanced Level) 1115. Counting Nodes in a BST (30)
简单题.统计一下即可. #include<cstdio> #include<cstring> #include<cmath> #include<vector& ...
- PAT甲1115 Counting Nodes in a BST【dfs】
1115 Counting Nodes in a BST (30 分) A Binary Search Tree (BST) is recursively defined as a binary tr ...
- PAT 1115 Counting Nodes in a BST[构建BST]
1115 Counting Nodes in a BST(30 分) A Binary Search Tree (BST) is recursively defined as a binary tre ...
随机推荐
- 安装Windows Installer服务
Windows Installer 5.0.810.500 下载地址: 电信:http://mdl1.mydown.yesky.com/soft/201303/WindowsInstaller.rar ...
- js写的一个HashMap
1.脚本 /** * 模拟HashMap */ function HashMap(){ //定义长度 var length = 0; //创建一个对象 var obj = new Object(); ...
- 互评Beta版本
作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2448] 基于NABCD评论作品,及改进建议 1.杨老师粉丝群.作品:<P ...
- L210 Ebola
Progress in fighting Democratic Republic of the Congo's Ebola outbreak, the second worst ever, will ...
- 写在连载之前——DIY微型操作系统篇
这个博客开了这么久都没写过什么东西.可能是因为我想写的东西在网上都能找得到,所以自己也懒得去写了. 但是这次当我在看<30天自制操作系统>这本书的时候发现,如果不用作者原版的光盘软件,要自 ...
- iOS 序列化和反序列化
摘自:http://hi.baidu.com/popln/blog/item/c3dd9302bb37e994d43f7ccb.html 开篇 1到底这个序列化有啥作用? 面向对象的程序在运行的时候会 ...
- HDU 3364
http://acm.hdu.edu.cn/showproblem.php?pid=3364 经典高斯消元解开关问题 m个开关控制n个灯,开始灯全灭,问到达目标状态有几种方法(每个开关至多一次操作,不 ...
- Windows下C++删除清除map
清除单map(非嵌套map) #include<map> #include<string> #include<iostream> using namespace s ...
- Word2007:如何在竖版(纵向)页面中间插入横版(横向)页面
通常情况下,我们在word排版过程中使用一种页面版式(横版/竖版)即可.但在某些特殊情况下,我们可能会需要在竖版页面中间插入一页或多页横版页面,抑或在横版页面中间插入竖版页面.那么,如何针对这 ...
- 利用GPU改善程序性能的一点心得
1. 硬件方面 a. 流处理器个数 Gpu内部的计算单元个数,决定分析模块实时性的关键因素. 实测效果: gtx760 1152个 Gtx960 1024个 单路1080p运动 ...