zoukankan      html  css  js  c++  java
  • pat1099. Build A Binary Search Tree (30)

    1099. Build A Binary Search Tree (30)

    时间限制
    100 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 the node's key.
    • The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
    • Both the left and right subtrees must also be binary search trees.

      Given the structure of a binary tree and a sequence of distinct integer keys, there is only one way to fill these keys into the tree so that the resulting tree satisfies the definition of a BST. You are supposed to output the level order traversal sequence of that tree. The sample is illustrated by Figure 1 and 2.

      Input Specification:

      Each input file contains one test case. For each case, the first line gives a positive integer N (<=100) which is the total number of nodes in the tree. The next N lines each contains the left and the right children of a node in the format "left_index right_index", provided that the nodes are numbered from 0 to N-1, and 0 is always the root. If one child is missing, then -1 will represent the NULL child pointer. Finally N distinct integer keys are given in the last line.

      Output Specification:

      For each test case, print in one line the level order traversal sequence of that tree. All the numbers must be separated by a space, with no extra space at the end of the line.

      Sample Input:
      9
      1 6
      2 3
      -1 -1
      -1 4
      5 -1
      -1 -1
      7 -1
      -1 8
      -1 -1
      73 45 11 58 82 25 67 38 42
      
      Sample Output:
      58 25 82 11 38 67 45 73 42
      

    提交代码

    平衡二叉树。每次找到中间节点。

     1 #include<cstdio>
     2 #include<stack>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<stack>
     6 #include<queue>
     7 #include<map>
     8 using namespace std;
     9 struct node{
    10     int l,r,v;
    11 };
    12 node tree[105];
    13 int line[105];
    14 int calnum(int num){
    15     if(num==-1){
    16         return 0;
    17     }
    18     return calnum(tree[num].l)+calnum(tree[num].r)+1;
    19     }
    20 void BuildAVL(int mid,int *line){
    21     if(mid==-1){
    22         return ;
    23     }
    24     int count=calnum(tree[mid].l);//统计左子树
    25 
    26     //cout<<count<<endl;
    27 
    28     tree[mid].v=line[count];
    29     BuildAVL(tree[mid].l,line);
    30     BuildAVL(tree[mid].r,line+count+1);
    31 }
    32 int main(){
    33     //freopen("D:\INPUT.txt","r",stdin);
    34     int n;
    35     scanf("%d",&n);
    36     int i;
    37     for(i=0;i<n;i++){
    38         scanf("%d %d",&tree[i].l,&tree[i].r);
    39     }
    40     for(i=0;i<n;i++){
    41         scanf("%d",&line[i]);
    42     }
    43     sort(line,line+n);
    44 
    45     /*for(i=0;i<n;i++){
    46         cout<<i<<" "<<line[i]<<endl;
    47     }*/
    48 
    49     BuildAVL(0,line);
    50 
    51     //cout<<":"<<"  "<<tree[0].v<<endl;
    52 
    53     queue<int> q;
    54     int cur;
    55     q.push(0);
    56     printf("%d",tree[0].v);
    57     while(!q.empty()){
    58         cur=q.front();
    59         q.pop();
    60         //cout<<"cur:  "<<cur<<endl;
    61 
    62         if(tree[cur].l!=-1){
    63             q.push(tree[cur].l);
    64             printf(" %d",tree[tree[cur].l].v);
    65         }
    66         if(tree[cur].r!=-1){
    67             q.push(tree[cur].r);
    68             printf(" %d",tree[tree[cur].r].v);
    69         }
    70     }
    71     printf("
    ");
    72     return 0;
    73 }
  • 相关阅读:
    Entity Framework 5.0运行.NET Framework 4.0之上在查询表达式中使用显示转换的一个问题
    How to get memcached all keys
    不同dll相同Type.FullName引发的问题
    WinDbg的cmdtree命令
    警惕缺省参数(Optional Parameters)对类型(Type)构造函数(Constructor)设计的影响
    如何解决Silverlight InitializeError #2103 Invalid or malformed application: Check manifest
    在北京拿5000.00元的工资
    分区表2
    C#操作config文件
    分区表1
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4781378.html
Copyright © 2011-2022 走看看