• 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;
    }
    
  • 相关阅读:
    .dbmdl 文件
    where 命令一个快速定位工具所在的功能
    Window 2008 R2 软件限制策略的默认调整,导致记录事件日志的权限不足
    大家知道什么是 asp.net 呢 ?学习一下
    asp.net membership常见问题总结
    DivCSS布局实例:很实用的图文混排CSS列表
    js 在网页里让文本框只能输入数字的一种方法,外加回车换Tab
    从零开始学DedeCms模板,模板教程,从此模板制作不求人
    .net 数据类型
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/9502031.html
Copyright © 2020-2023  润新知