1115. Counting Nodes in a BST (30)-PAT甲级真题(二叉树的遍历,dfs)

来源:互联网 发布:我的世界java路径 编辑:程序博客网 时间:2024/06/06 16:47

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 [-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 28
Sample Output:
2 + 4 = 6

题目大意:输出一个二叉搜索树的最后两层结点个数a和b,以及他们的和c:“a + b = c”

分析:用链表存储,递归构建二叉搜索树,深度优先搜索,传入的参数为结点和当前结点的深度depth,如果当前结点为NULL就更新最大深度maxdepth的值并return,将每一层所对应的结点个数存储在数组num中,输出数组的最后两个的值~~~~

#include <cstdio>#include <vector>using namespace std;struct node {    int v;    struct node *left, *right;};node* build(node *root, int v) {    if(root == NULL) {        root = new node();        root->v = v;        root->left = root->right = NULL;    } else if(v <= root->v)        root->left = build(root->left, v);    else        root->right = build(root->right, v);    return root;}vector<int> num(1000);int maxdepth = -1;void dfs(node *root, int depth) {    if(root == NULL) {        maxdepth = max(depth, maxdepth);        return ;    }    num[depth]++;    dfs(root->left, depth + 1);    dfs(root->right, depth + 1);    }int main() {    int n, t;    scanf("%d", &n);    node *root = NULL;    for(int i = 0; i < n; i++) {        scanf("%d", &t);        root = build(root, t);    }    dfs(root, 0);    printf("%d + %d = %d", num[maxdepth-1], num[maxdepth-2], num[maxdepth-1] + num[maxdepth-2]);    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 24个月宝宝不愿意说话怎么办 孩子凉着肚子吐怎么办 教宝宝说话不会说怎么办 2岁宝宝语言退化怎么办 两周宝宝嗓子哑怎么办 幼儿园孩子上课爱说话老师怎么办 一岁宝宝不会爬怎么办 孩子说话不太清楚怎么办 十一个月宝宝不爱吃饭怎么办 14个月宝宝不爱吃饭怎么办 一岁宝宝喜欢哭怎么办 4岁儿童不会说话怎么办 8个月宝宝37.5度怎么办 8个月婴儿37.5度怎么办 5个月宝宝38度怎么办 5个月宝宝发烧怎么办 五个月小孩38度怎么办 宝宝3岁还不会说话 怎么办 两岁宝宝流口水厉害怎么办 两周宝宝不说话怎么办 两岁宝宝说话有点口吃怎么办 一周岁的宝宝脾气不好怎么办 九个月的宝宝脾气不好怎么办 两岁宝宝脾气不好怎么办 2岁宝宝脾气不好怎么办 3岁宝宝脾气不好怎么办 脾气不好吓到宝宝了怎么办 四个月宝宝脾气不好怎么办 5岁说话不清楚该怎么办 小孩快上幼儿园了不怎么说话怎么办 四岁宝宝吐字不清楚怎么办 孕28周胎儿腿短怎么办 b超显示腿短怎么办 2岁多宝宝不愿意说话怎么办 6岁儿童咬字不清怎么办 两岁宝宝爱看电视怎么办 两岁宝宝喜欢看电视怎么办 三岁宝宝说话不清晰怎么办 儿子快四岁了说话不清楚怎么办 儿子快三岁了说话不清楚怎么办 2岁宝宝受刺激了怎么办