zoukankan      html  css  js  c++  java
  • 1115 Counting Nodes in a BST (30 分)

    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 (≤) 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


    就是一个建树的问题,不值30分

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 struct Node{
     4     int val;
     5     Node *left, *right;
     6 };
     7 int n, x, vis[2000];
     8 int maxl = 0;
     9 Node *build(Node *root, int val){
    10     if(root == NULL){
    11         root = new Node();
    12         root->val = val;
    13         root->left = root->right = NULL;
    14     }else{
    15         if(val <= root->val){
    16             root->left = build(root->left, val);
    17         }else{
    18             root->right = build(root->right, val);
    19         }
    20     }
    21     return root;
    22 }
    23 void output(Node *root, int x){
    24     if(root != NULL){
    25         vis[x]++;
    26         maxl = max(maxl,x);
    27         output(root->left, x+1);
    28         output(root->right, x+1);
    29     }
    30 }
    31 int main(){
    32     cin >> n;
    33     Node *tree = NULL;
    34     for(int i = 0; i < n; i++){
    35         cin >> x;
    36         tree = build(tree,x);
    37     }
    38     output(tree, 1);
    39     cout << vis[maxl] <<" + "<<vis[maxl-1]<<" = "<<vis[maxl]+vis[maxl-1]<<endl;
    40     return 0;
    41 }



  • 相关阅读:
    luogu2394 yyy loves Chemistry I
    luogu2393 yyy loves Maths II
    2018年01月刷题学习日记
    luogu2590 [ZJOI2008]树的统计
    HDU 2087 剪花布条
    HDU 1686 Oulippo
    HDU 1711 Number Sequence(KMP模板)
    HDU 3336 Count the String(KMP+DP)
    UVa 1614 奇怪的股市
    UVa 12174 Shuffle(滑动窗口)
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/11333697.html
Copyright © 2011-2022 走看看