zoukankan      html  css  js  c++  java
  • PAT 1115 Counting Nodes in a BST

    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 [−10001000] 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> //建立二叉树和dfs
    using namespace std;
    int maxdeep=0, a=0, b=0;
    struct node{
      int value;
      node* left=NULL;
      node* right=NULL;
      node(int v):value(v), left(NULL), right(NULL){
      }
    };
    node* insert(int v, node* root, int deep){
      if(!root){
        node* temp=new node(v);
        root =temp;
        maxdeep=(deep>maxdeep?deep:maxdeep);
      }else{
      	if(v<=root->value)
        	root->left=insert(v, root->left, deep+1);
        else
        	root->right=insert(v, root->right, deep+1);
      }
      return root;
    }
    void preorder(node* root, int deep){	
        if(root==NULL)
    		return;
    	if(deep==maxdeep-1)
    		a++;
    	else if(deep==maxdeep)
    	    b++;
    	preorder(root->left, deep+1);
    	preorder(root->right, deep+1);
    	
    }
    int main(){
      int n, v;
      cin>>n;
      node* root=NULL;
      for(int i=0; i<n; i++){
        cin>>v;
        root=insert(v, root, 1);
      }
      preorder(root, 1);
      cout<<b<<" + "<<a<<" = "<<a+b<<endl;
      return 0;
    }
    
  • 相关阅读:
    状态管理cookie 案例
    JavaScript对象(document对象 图片轮播)
    JavaScript对象(窗口对象 定时器对象 )
    JavaScript对象(正则表达式,Date对象,function对象 arguments对象)
    CSS概述<选择器总结>
    HTML表单
    Web表格
    JDBC项目实践
    JDBC获取表的主键
    JDBC中DAO事务函数模版
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/9502031.html
Copyright © 2011-2022 走看看