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 分)的更多相关文章

  1. 【PAT甲级】1115 Counting Nodes in a BST (30分)(二叉查找树)

    题意: 输入一个正整数N(<=1000),接着输入N个整数([-1000,1000]),依次插入一棵初始为空的二叉排序树.输出最底层和最底层上一层的结点个数之和,例如x+y=x+y. AAAAA ...

  2. [二叉查找树] 1115. Counting Nodes in a BST (30)

    1115. Counting Nodes in a BST (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  3. 1115. Counting Nodes in a BST (30)

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

  4. 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 ...

  5. PAT甲题题解-1115. Counting Nodes in a BST (30)-(构建二分搜索树+dfs)

    题意:给出一个序列,构建二叉搜索树(BST),输出二叉搜索树最后两层的节点个数n1和n2,以及他们的和sum: n1 + n2 = sum 递归建树,然后再dfs求出最大层数,接着再dfs计算出最后两 ...

  6. PAT A 1115. Counting Nodes in a BST (30)【二叉排序树】

    题目:二叉排序树,统计最后两层节点个数 思路:数组格式存储,insert建树,dfs遍历 #include<cstdio> #include<iostream> #includ ...

  7. PAT (Advanced Level) 1115. Counting Nodes in a BST (30)

    简单题.统计一下即可. #include<cstdio> #include<cstring> #include<cmath> #include<vector& ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. 使用MyEclipse将HTML5移动项目迁移到PhoneGap(三)

    MyEclipse开年钜惠 在线购买低至75折!立即开抢>> [MyEclipse最新版下载] 三.将图像从HTML5项目复制到PhoneGap项目 1. 在PhoneGap项目的www ...

  2. Effective C++阅读笔记

    条款1:视C++为一个语言联邦:C.Object-Oriented C++.Template C++.STLC++高效编程守则视情况而变化,取决于使用C++的哪一个部分 条款2:尽量以const,en ...

  3. HDU 1565

    http://acm.hdu.edu.cn/showproblem.php?pid=1565 先进行二分图黑白染色,S到黑,白到T,黑到白,问题转化成了求最大权独立集,最大点权独立集=sum-最小点权 ...

  4. Linux命令行操作进程

    参见 12个进程管理命令介绍 Linux如何查看进程.杀死进程.启动进程等常用命令

  5. HDU 2089:不要62

    Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来 ...

  6. hdu1059 dp(多重背包二进制优化)

    hdu1059 题意,现在有价值为1.2.3.4.5.6的石头若干块,块数已知,问能否将这些石头分成两堆,且两堆价值相等. 很显然,愚蠢的我一开始并想不到什么多重背包二进制优化```因为我连听都没有听 ...

  7. bootstrap中如何控制input的宽度

    ☆1☆ bootstrap中如何控制input的宽度: v2版本:定义了很多class,可用在input. "input-block-level"."input-mini ...

  8. Microsoft - Get Course Order

    // "static void main" must be defined in a public class. public class Main { public static ...

  9. hasura graphql-engine v1.0.0-alpha26 版本新功能

    hasura 发布了graphql-engine v1.0.0-alpha26 版本,有一些破坏的变动,以及方便的新特性 破坏性变动 order_by 从 order_by: id_asc 为 ord ...

  10. 转 JavaScript中判断对象类型的种种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...