PAT 甲级 1115 Counting Nodes in a BST
作者:互联网
https://pintia.cn/problem-sets/994805342720868352/problems/994805355987451904
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 (≤) which is the size of the input sequence. Then given in the next line are the N integers in [ 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
代码:
#include <bits/stdc++.h> using namespace std; int N; vector<int> v(1000); int depth = -1; struct Node { int val; struct Node *left, *right; }; Node* BuildBST(Node *root, int x) { if(!root) { root = new Node(); root -> val = x; root -> left = NULL; root -> right = NULL; } else if(x <= root -> val) root -> left = BuildBST(root -> left, x); else root -> right = BuildBST(root -> right, x); return root; } void dfs(Node* root, int step) { if(!root) { depth = max(depth, step); return ; } v[step] ++; dfs(root -> left, step + 1); dfs(root -> right, step + 1); } int main() { scanf("%d", &N); Node *root = NULL; for(int i = 0; i < N; i ++) { int num; scanf("%d", &num); root = BuildBST(root, num); } dfs(root, 0); printf("%d + %d = %d\n", v[depth - 1], v[depth - 2], v[depth - 1] + v[depth - 2]); return 0; }
先建树然后 dfs 记录每一层的节点数目存在数组里 和上个提交的题目比较类似了
FH
标签:Node,right,PAT,BST,int,depth,1115,root,left 来源: https://www.cnblogs.com/zlrrrr/p/10391085.html