• 【LeetCode & 剑指offer刷题】熟悉OJ平台3:OJ编程实例


    【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

    OJ编程实例

    给定一棵二叉树的前序(根、左、右)和中序(左、根、右)的打印结果,输出此二叉树按层(从左往右)打印结果。
    例如一棵二叉树前序:1 2 4 5 3;中序:4 2 5 1 3。可以构建出下图所示二叉树:
     
     
    按层打印的结果则为:1 2 3 4 5。
    按层打印二叉树(去哪儿网2017春招真题)
    题目描述
     
    输入
    第一行只有一个数字,表示二叉树的节点数n(1<=n<=1000);
    第二行由a1,a2,...,an(1<=ai<=1000)组成的整数序列(用空格分隔)—表示前序打印结果;
    第三行由b1,b2,...,bn(1<=bi<=1000)组成的整数序列(用空格分隔)—表示中序打印结果。
     
    样例输入
    5
    1 2 4 5 3
    4 2 5 1 3
     
    输出
    c1,c2,...,cn,用空格分隔—表示按层打印的结果。
     
    样例输出
    1 2 3 4 5
     
    时间限制
    C/C++语言:2000MS
    其它语言:4000MS
    内存限制
    C/C++语言:65536KB
    其它语言:589824KB
     
     
    using namespace std;
    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <queue>
    #include <algorithm>
    struct TreeNode
    {
        int val;
        TreeNode *left;
        TreeNode *right;
        TreeNode(int x) :val(x), left(NULL), right(NULL) {} //参数初始化列表
    };
    using iter = vector<int>::iterator;
    TreeNode* createTree(iter prebegin, iter preend, iter inbegin, iter inend);
    void levelOrder(TreeNode* root);
    int main()
    {
    /*  if (freopen("./src/input.txt", "r", stdin))//代替手工输入,需加<cstdio>头文件,vs默认路径起点为工程文件所在的目录
            cout << "读取成功" << endl;
        else
            cout << "读取文件失败" << endl;*/
        int n;
        cin >> n;
        vector<int> preorder(n);
        vector<int> inorder(n);
        for (int i = 0; i<n; i++)
        {
            cin >> preorder[i];
        }
        for (int i = 0; i<n; i++)
        {
            cin >> inorder[i];
        }
        TreeNode* root = createTree(preorder.begin(), preorder.end(), inorder.begin(), inorder.end());
        levelOrder(root);
        return 0;
    }
    TreeNode* createTree(iter prebegin, iter preend, iter inbegin, iter inend)
    {
        if (prebegin >= preend || inbegin >= inend) return nullptr;
        TreeNode* root = new TreeNode(*prebegin);
        iter root_pos = find(inbegin, inend, root->val);
        int left_length = root_pos - inbegin;
        root->left = createTree(prebegin + 1, prebegin + left_length + 1, inbegin, root_pos);
        root->right = createTree(prebegin + left_length + 1, preend, root_pos + 1, inend);
        return root;
    }
    void levelOrder(TreeNode* root)
    {
        if (root == nullptr) return;
        queue<TreeNode*> q;
        q.push(root);
        while (!q.empty())
        {
            int size = q.size();
            for (int i = 0; i<size; i++)
            {
                TreeNode* node = q.front();
                cout << node->val << ' ';
                q.pop();
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
        }
    }
     
     
    集合(京东2017秋招真题)
     
     
    题目描述
     
     
    给你两个集合,要求 {A} + {B}。
    注:同一个集合中不会有两个相同的元素。
     
    输入
    多组(不超过 5 组)数据。
    每组输入数据分为三行,第一行有两个数字 n,m($0<n,mleq10000$),分别表示集合 A 和集合 B 的元素个数。后两行分别表示集合 A 和集合 B。每个元素为不超出 int 范围的整数,每个元素之间有一个空格隔开。
     
    样例输入

     

    1 2
    1
    2 3
    1 2
    1
    1 2
     
    输出
    针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开。
    样例输出

     

    1 2 3
    1 2
    时间限制
    C/C++语言:1000MS
    其它语言:3000MS
    内存限制
    C/C++语言:65536KB
    其它语言:589824KB
     
     
    #include<iostream>
    #include<set>
    using namespace std;
    int main()
    {
      int m,n;
      while(cin>>m>>n) //不确定会输入多少组
      {
          set<int> s;
          int t;
          for(int i=0;i<m;++i)
          {
            cin>>t;
            s.insert(t);
          }
          for(int i=0;i<n;++i)
          {
            cin>>t;
            s.insert(t);
          }
         for(set<int>::iterator it=s.begin();it!=s.end();it++)
          {
              cout<<*it<<" "; //按从小到大输出
          }
          cout<<endl;
      }
     
      return 0;
    }
     
    题目来源:http://exercise.acmcoder.com/online/online_judge_ques?ques_id=4172&konwledgeId=169
     
     
     
  • 相关阅读:
    api接口对于客户端的身份认证方式以及安全措施
    学SpringMVC
    Android用户界面设计:框架布局(转)
    Android与服务器端数据交互(转)
    用android LinearLayout和RelativeLayout实现精确布局(转)
    Android 源代码结构(转)
    Android开发在路上:少去踩坑,多走捷径(转)
    Map.EntrySet的使用方法
    利用JasperReport+iReport进行Web报表开发
    eclipse3.2 汉化 汉化包下载
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10229637.html
Copyright © 2020-2023  润新知