PAT1115:Counting Nodes in a BST
1115. Counting Nodes in a BST (30)
时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, YueA 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 [-1000 1000] 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 28Sample Output:
2 + 4 = 6
思路
简单题,打印出二叉搜索树最后两层的节点数之和,格式为:"n1 + n2 = sum(n1,n2)"。
1.根据输入建立二叉搜索树
2.前序遍历二叉树,用一个数组统计每一层的节点数,levels[i]代表第i层的节点数,用一个maxlevel不断更新最大层数。
3.输出levels[maxlevel] + levels[maxlevel - 1]。
代码
#include<iostream> #include<vector> using namespace std; vector<int> levels; int maxlevel = -1; class node { public: node(int _val):val(_val),left(nullptr),right(nullptr) { } int val; node* left; node* right; }; typedef node* treenode; void buildBST(treenode& root,int val) { if(val <= root->val && !root->left) { root->left = new node(val); return; } if(val <= root->val && root->left) { buildBST(root->left,val); return; } if(val > root->val && !root->right) { root->right = new node(val); return; } if(val > root->val && root->right) { buildBST(root->right,val); return; } } void countNodes(const treenode root,int level) { levels[level]++; if(level > maxlevel) maxlevel = level; if(!root->left && !root->right) return; if(root->left) countNodes(root->left,level + 1); if(root->right) countNodes(root->right,level + 1); } int main() { int n; while(cin >> n) { levels.resize(n + 1); treenode root = new node(0); cin >> root->val; for(int i = 1;i < n;i++) { int tmp; cin >> tmp; buildBST(root,tmp); } countNodes(root,1); cout << levels[maxlevel] << " + " << levels[maxlevel - 1] << " = " << levels[maxlevel] + levels[maxlevel - 1] << endl; } }
- PAT甲级 1115. Counting Nodes in a BST
- PAT 甲级 1115. Counting Nodes in a BST (30)
- solution Of Pat 1115. Counting Nodes in a BST (30)
- PAT - 甲级 - 1115. Counting Nodes in a BST (30)(建树+记录结点个数)
- [二叉查找树] 1115. Counting Nodes in a BST (30)
- Counting Nodes in a BST
- 1115. Counting Nodes in a BST (30)
- 1115. Counting Nodes in a BST (30)(建立二叉搜索树)
- PAT (Advanced Level) 1115. Counting Nodes in a BST (30) 解题报告
- 1115. Counting Nodes in a BST 解析
- 1115. Counting Nodes in a BST (30)
- PAT A 1115. Counting Nodes in a BST (30)
- 1115. Counting Nodes in a BST (构建二叉排序树,输出最后两层的节点数)
- 1115. Counting Nodes in a BST (30) PAT 甲级
- PAT甲级 1115. Counting Nodes in a BST (30)
- PAT 1115 Counting Nodes in a BST (30)
- PAT A 1115. Counting Nodes in a BST (30)【二叉排序树】
- pat甲1115. Counting Nodes in a BST(BST二叉搜索树)
- 1115. Counting Nodes in a BST
- 1115. Counting Nodes in a BST (30)