• PAT(Advanced Level)A1099. Build A Binary Search Tree


    题意

    给定一个二叉树的形状,要求在给定的序列中放置题目给定的数字序列,要求填入后整棵树符合BST的定义。最后答案要输出层序遍历

    思路

    • 1⃣️可以肯定的是要利用BST中序遍历有序这个特点来进行填数
    • 2⃣️所以现在的问题就是如何根据题目给的数据正确的构造出符合要求的完全二叉树。因为给的是编号,所以考虑用静态写法

    代码

    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <vector>
    #include <queue>
    using namespace std;
    struct node{
        int left, right;
        int val;    
    } tree[110];
    int n;
    int cur = 0;
    void inorder(int root, vector<int>& seq)
    {
        if(root == -1)  return;
        if(root >= n)   return;
        inorder(tree[root].left, seq);
        int val = seq[cur++];
        tree[root].val = val;
        inorder(tree[root].right, seq);
    }//中序遍历放置数字
    
    void bfs(int root, vector<int>& vi)
    {
        queue<int> q;
        q.push(root);
        while(!q.empty())
        {
            int size = q.size();
            for(int i=0;i<size;i++)
            {
                auto cur = q.front();
                q.pop();
                vi.emplace_back(tree[cur].val);
                //如果左右孩子等于-1表示没有孩子
                if(tree[cur].left != -1)
                    q.push(tree[cur].left);
                if(tree[cur].right != -1)
                    q.push(tree[cur].right);
            }
        }
    }
    int main()
    {
        cin >> n;
        int l, r;
        for(int i=0;i<n;i++)
        {
            cin >> l >> r;
            tree[i].left = l;
            tree[i].right = r;
        }   //读入结点信息
        vector<int> seq;    //存放题目给的BST的数值序列
        int t;
        for(int i=0;i<n;i++)
        {
            cin >> t;
            seq.emplace_back(t);
        }
        sort(seq.begin(), seq.end());   //排序后准备用中序遍历填数
        inorder(0, seq);    //中序遍历填数
        
        vector<int> level_travel;   //存放层序遍历结果
        bfs(0, level_travel);
        for(int i=0;i<level_travel.size();i++)
            i == level_travel.size() - 1 ? cout << level_travel[i] : cout << level_travel[i] << " ";
        return 0;
    }
    
    
  • 相关阅读:
    MySql为查询结果添加前、后缀
    SQLHelper类
    OracleHelper类
    C#在sql中使用變量訪問Oracle數據庫
    转-调用HTMLTestRunner生成的报告中不能显示用例中print函数的输出
    HTMLTestRunner优化:带截图、饼图、失败重跑
    【转】如何成功安装旧版本火狐,成功安装firebug和firepath插件
    【转】Selenium 加载Chrome/Firefox浏览器配置文件
    mac查看python安装路径
    requests模拟上传照片
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/13832141.html
Copyright © 2020-2023  润新知