zoukankan      html  css  js  c++  java
  • [二叉查找树] 1115. Counting Nodes in a BST (30)

    1115. Counting Nodes in a BST (30)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    16000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    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
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <queue>
    using namespace std;
    
    const int maxn=10000;
    
    struct Node
    {
        int data;
        int layer;
        Node *lchild,*rchild;
    };
    
    void insert(Node * & root,int data)
    {
        if(root==NULL)
        {
            root=new Node;
            root->lchild=NULL;
            root->rchild=NULL;
            root->data=data;
            return ;
        }
        if(root->data<data) insert(root->rchild,data);
        else insert(root->lchild,data);
    }
    
    
    int max_layer=0;
    int layer[maxn]={0};
    
    void layerOrder(Node * root)
    {
        queue<Node *> q;
        root->layer=1;
        q.push(root);
        while(!q.empty())
        {
            Node * now=q.front();
            q.pop();
            if(now->layer>max_layer) max_layer=now->layer;
            layer[now->layer]+=1;
            if(now->lchild!=NULL)
            {
                now->lchild->layer=now->layer+1;
                q.push(now->lchild);
            }
            if(now->rchild!=NULL)
            {
                now->rchild->layer=now->layer+1;
                q.push(now->rchild);
            }
        }
    }
    
    int main()
    {
        int n;
        cin>>n;
        Node * root=NULL;
        for(int i=0;i<n;i++)
        {
            int input;
            cin>>input;
            insert(root,input);
        }
        layerOrder(root);
        int a=layer[max_layer];
        int b=layer[max_layer-1];
        cout<<a<<" + "<<b<<" = "<<a+b<<endl;
        return 0;
    }
  • 相关阅读:
    poj2928:素数回文数的个数
    R语言学习中的小bug:R中矩阵相乘错误于A %*% B: 需要数值/复数矩阵/矢量参数
    poj3247:回文素数
    Python爬虫之BeautifulSoap的用法
    python jieba库的使用说明
    彻底弄懂python编码
    第八周助教总结
    python中数组用法
    python列表操作大全
    python—各种常用函数及库
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/6445112.html
Copyright © 2011-2022 走看看