小米-2020-秋招-软件开发笔试
作者:互联网
笔试
打印二叉树
一个重建二叉树+中序遍历打印的问题
麻烦的是C++中没有现成的替换字符串中子字符串的函数
#include <iostream>
#include <vector>
#include <stack>
#include <string>
using namespace std;
struct TreeNode {
char val;
TreeNode* leftChild;
TreeNode* rightChild;
TreeNode(char _val) :val(_val), leftChild(nullptr), rightChild(nullptr) {}
};
TreeNode* buildTree(string input) {
stack<TreeNode*> nodes;
// 将字符串转为一个字符数组
vector<char> nums;
nums.resize(input.size());
nums.assign(input.begin(), input.end());
for (char ch : nums) {
if (ch >= '0' && ch <= '9') {
TreeNode* node = new TreeNode(ch);
nodes.push(node);
}
else if (ch == ')') {
TreeNode* right = nodes.top();
nodes.pop();
TreeNode* left = nodes.top();
nodes.pop();
nodes.top()->leftChild = left->val == '0' ? nullptr : left;
nodes.top()->rightChild = right->val == '0' ? nullptr : right;
}
}
return nodes.top();
}
void printTree(TreeNode* root) {
if (!root) return;
printTree(root->leftChild);
cout << root->val;
printTree(root->rightChild);
}
int main() {
string _input;
getline(cin, _input);
string::size_type pos = 0;
// string::npos表示直至字符串结尾
while ((pos = _input.find("(,")) != string::npos) {
_input.replace(pos, 2, "(0,");
}
while ((pos = _input.find(",)")) != string::npos) {
_input.replace(pos, 2, ",0)");
}
TreeNode* root = buildTree(_input);
printTree(root);
return 0;
}
// 1(2(3,4(,5)),6(7,))
小米之家购物
很明显是个背包问题
标签:TreeNode,软件开发,val,pos,2020,秋招,input,root,string 来源: https://www.cnblogs.com/yaocy/p/16692642.html