⭐️ 题目描述
🌟 leetcode链接:根据二叉树创建字符串
思路:
使用二叉树的前序遍历,使用一个 string
拼接当前 root->val
,拼接左孩子和右孩子的时候需要考虑是否添加()
。
- 右孩子不存在则不需要
()
- 左右孩子都不存在也不需要
()
- 左孩子不存在右孩子存在需要
()
,这里的()
不可以省略
代码:
class Solution {
public:
string tree2str(TreeNode* root) {
if (root == nullptr) {
return "";
}
/*
根(左子树)(右子树) 左子树和右子树需要使用括号括起来
1(2(4()())())(3()())
消除没有意义的括号
1. 右孩子不存在不需要括号
2. 左孩子存在需要括号
3. 左孩子不存在右孩子存在也需要括号
1(2(4))(3)
*/
string str;
str += to_string(root->val);
// 左孩子存在需要() 或者 左孩子不存在右孩子存在也需要括号
if (root->left || root->right) {
str += "(";
str += tree2str(root->left);
str += ")";
}
// 右孩子存在需要括号
if (root->right) {
str += "(";
str += tree2str(root->right);
str += ")";
}
return str;
}
};