其他分享
首页 > 其他分享> > 小米-2020-秋招-软件开发笔试

小米-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