根据二叉树创建字符串
题目描述:
给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。
空节点使用一对空括号对 “()” 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
思路:
前序遍历,从树中取出元素组成数组。
根据题意如果节点为空,用括号表示:
- 左边为空,右边不为空,左括号保留
- 左边为空,右边为空,左右括号都不保留
- 左边不为空,右边为空,右边括号不保留
代码:
class Solution {
public:
string tree2str(TreeNode* root) {
if (root == nullptr)
{
return "";
}
string str = to_string(root->val);
if (root->left || root->right)//能走到root->right这一步,说明左节点为空。若右节点不为空,需要打印()
{
str += '(';
str += tree2str(root->left);
str += ')';
}
if (root->right)
{
str += '(';
str += tree2str(root->right);
str += ')';
}
return str;
}
};