题目

在某个存储介质以如下形式保存一棵二叉树

1(2(3,4(,5)),6(7,))

上述序列表示的二叉树如下

观察后可以发现,每个节点的格式为

XX可以为空

或者

X(Y, Z),其中X不为空

请编写程序将以上述格式输入的二叉树输出为中序遍历顺序

输入

上述格式表示的二叉树字符串,用字符1~9表示每个二叉树的每个节点,字符可以重复使用

输出

二叉树的中序遍历结果

样例输入

1(2(3,4(,5)),6(7,))

样例输出

3245176

代码

思路:先写出二叉树结点定义,接着用栈实现建立二叉树,再对已建立好的二叉树进行中序遍历。

#include <iostream>
#include <vector>
#include <numeric>
#include <limits>
#include <string>
#include <stack>using namespace std;/*请完成下面这个函数,实现题目要求的功能
当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^
******************************开始写代码******************************///定义二叉树结点
typedef struct TreeNode {char val;TreeNode* left;TreeNode* right;TreeNode() : val(0), left(NULL), right(NULL) {}
}TreeNode;void Traversal(TreeNode* cur, string& res) {if (cur != NULL) {Traversal(cur->left, res);res += cur->val;Traversal(cur->right, res);}
}string solution(string input) {//先将输入构造成一棵二叉树stack<TreeNode*> st;string result;vector<int> pos; //记录原字符串添加0的位置for (int i = 0; i < input.size(); i++) {if (input[i] == '(' && input[i + 1] == ',') {pos.push_back(i+1);}else if (input[i] == ',' && input[i + 1] == ')') {pos.push_back(i+1);}}for (int i = 0; i < pos.size(); i++) {input.insert(pos[i] + i, "0");}//将添0后的字符串构造成二叉树   1(2(3,4(0,5)),6(7,0))for (int j = 0; j < input.size(); j++) { if (input[j] >= '0' && input[j] <= '9') { //是数字就压栈TreeNode* node = new TreeNode();node->val = input[j];st.push(node);}else if (input[j] == ')') { //遇到右括号,就将其前面压栈的两个结点弹出TreeNode* right = st.top();st.pop();TreeNode* left = st.top();st.pop();st.top()->left = left->val == '0' ? NULL : left;   //结点中值为0不能添加,左孩子应当为空指针st.top()->right = right->val == '0' ? NULL : right;}}//中序遍历Traversal(st.top(), result);return result;
}
/******************************结束写代码******************************/int main() {string res;string _input; // 1(2(3,4(,5)),6(7,))getline(cin, _input);res = solution(_input);cout << res << endl;return 0;}

小米2020软件开发 编程题1相关推荐

  1. 拼多多2020校招部分编程题

    文章目录 拼多多2020校招部分编程题 多多的排列函数 canci 拼多多2020校招部分编程题 #include <iostream> using namespace std; int ...

  2. 软件开发编程规范及原则

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 我的网站:h ...

  3. 网易2020校招笔试编程题回顾

    把今天的记忆里面的笔试题的情况梳理一下,投递的是算法工程师: 题型总共分为选择题10*1  编程题10.20.20.30  问答题5*2 编程题: 1.倒数排序:给你一个数n,以及1-n的一个排列,让 ...

  4. 华为2020校招笔试编程题 看这篇就够了(上)

    背景 近日一位在华为的师兄整理了一份内部的提纲给我们,想着以后肯定不会去华为,于是乎分享给大家,看看菊花厂今年的笔试题目是什么样子的. 编程题范围 这好像来自一个华为内部的文档,据说今年华为内部也在进 ...

  5. 2019.9.11 小米笔试算法岗编程题 两个动归

    1.最大连续子序列之和 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C++语言 65536KB:其他语言 589824KB 题目描述: 给定K个整数的序列{ N1, ...

  6. 2020软件开发趋势预测(学习总结)

    数字化,工业4.0,对软件开发人员的巨大需求. 云计算/云服务.容器技术.软件架构.编程语言.Web开发.APP.深度学习.数据库.数据湖.批处理.流处理.字节码(ByteCode).无代码(No-c ...

  7. 2020中国电信校招编程题

    第一题:括号匹配问题 问题描述:输入一行字符串,判断字符串是否匹配.匹配则输出yes,不匹配则输出no. 输入: {[()]} 输出: yes 输入: {[(])} 输出: no 思路: 在遍历字符串 ...

  8. 美团小哥用计算机,美团2020算法工程师编程题--外卖小哥的保温箱

    题目描述: 众所周知,美团外卖的口号是:"美团外卖,送啥都快".身着黄色工作服的骑手作为外卖业务中商家和客户的重要纽带,在工作中,以快速送餐突出业务能力:工作之余,他们会通过玩智力 ...

  9. 2020软件开发工程程序员面试经验分享--菊厂OD现场码代码试题1

    1.设计电梯时,房地产商要求在电梯按钮上不允许出现数字"4",即电梯数字序列为1,2,3,5,6,7,8,9,10--,现在需要提供一个函数getRealLevel,传入电梯按钮上 ...

最新文章

  1. 存在于实数域的微观粒子5-可分类性
  2. 「 活动 」连续 3 天,企业容器应用实战营上海站来啦!
  3. 0x00000000指令引用的内存不能为written_「深入Java虚拟机」Java内存区域与内存溢出...
  4. 【技术贴】解决 myeclipse打不开报错an error has occurred, see .
  5. python小案例随机点名_python用tkinter实现一个简易能进行随机点名的界面
  6. HarmonyOS之深入解析设备标识符的功能和使用
  7. 基于SDN的应用定义安全方案
  8. SAP UI5 应用的中文乱码问题
  9. Sunisoft.IrisSkin.SkinEngine 设置winform皮肤
  10. smart700iev3 程序下载设置_分享一款Aira2下载工具
  11. Web存储—本地存储Cookie
  12. DeepMind新智能体架构Unicorn:持续学习能力胜过多个基准智能体
  13. python函数式编程-装饰器
  14. web前端课程设计源码大全(HTML+CSS+JS)
  15. 特征提取丨共空间模式 Common Spatial Pattern (CSP)
  16. android 实现按键精灵
  17. 一加3 android 8.0,一加3 android 8.0 启动uiautomator server失败
  18. V-if 的常见用法
  19. QT学习记录 --- 获取文件哈希值
  20. selenium - web 自动化测试

热门文章

  1. xinzitianqi.h 太极创客的东西
  2. python print函数
  3. DT时代,大数据如何服务产业经济?
  4. 腾讯低代码平台正式开源!可拖拽、生成手机项目、PC 项目!接私活福利啊!...
  5. 网页内嵌入百度搜索的源代码-站长FAQ
  6. Flick Tab Control
  7. 倒排索引的理论和代码实现
  8. OC5021B 开关降压型 LED 恒流驱动器
  9. 双时格林函数演练总结
  10. 圈地运动——多边形构成问题