zoukankan      html  css  js  c++  java
  • PAT1099:Build A Binary Search Tree

    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.1064的老办法,将节点值升序排序后就是搜索树的中序遍历序列。

    2.从根节点开始按中序遍历构造整棵树。

    3.层次遍历打印整棵树(用队列BFS)。

    代码

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<queue>
    using namespace std;
    class Node
    {
     public:
      int left;
      int right;
      int val;
    };
    vector<Node> bstnodes(101);
    vector<int>  nodevalue(101);
    int index;
    
    
    void createBST(int root)
    {
      if(bstnodes[root].left != -1)
        createBST(bstnodes[root].left);
      bstnodes[root].val = nodevalue[index++];
      if(bstnodes[root].right != -1)
        createBST(bstnodes[root].right);
    }
    
    int main()
    {
        int N;
        while(cin >> N)
        {
          index = 0;
          for(int i = 0;i < N;i++)
          {
            cin >> bstnodes[i].left >> bstnodes[i].right;
          }
          for(int i = 0;i < N;i++)
          {
              cin >> nodevalue[i];
          }
          sort(nodevalue.begin(),nodevalue.begin()+N);
          createBST(0);
    
    
          //print
          queue<int> q;
          q.push(0);
          while(!q.empty())
          {
              int temp = q.front();
              q.pop();
              if(temp != 0)
                cout <<" ";
              cout << bstnodes[temp].val;
              if(bstnodes[temp].left != -1)
                q.push(bstnodes[temp].left);
              if(bstnodes[temp].right != -1)
                q.push(bstnodes[temp].right);
          }
          cout << endl;
        }
        return 0;
    }
  • 相关阅读:
    数据库表结构变动发邮件脚本
    .net程序打包部署
    无法登陆GitHub解决方法
    netbeans 打包生成 jar
    第一次值班
    RHEL6 纯命令行文本界面下安装桌面
    C语言中格式化输出,四舍五入类型问题
    I'm up to my ears
    How to boot ubuntu in text mode instead of graphical(X) mode
    the IP routing table under linux@school
  • 原文地址:https://www.cnblogs.com/0kk470/p/7622988.html
Copyright © 2011-2022 走看看