1. 题目
给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。
空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
2. 示例
输入:root = [1,2,3,4]
输出:"1(2(4))(3)"
解释:初步转化后得到 "1(2(4)())(3()())" ,但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)" 。
3. 分析
1.树的遍历,需要用到递归,考虑递归调用子函数
2.输出字符串,那么就要把树的节点值用to_string( )从整形转为字符串
3.由于的返回值类型是string,每次递归调用都会调拷贝构造函数,需要开空间,拷贝数据,会存在大量的string深拷贝,因此可以考虑用子递归传字符串的引用,就没有了string的深拷贝。
4. 代码实现
class Solution {
public:
void _tree2str(TreeNode* root,string& str)
{
if(root == nullptr)
{
return;
}
str += to_string(root->val);
if(root->left || root->right)
{
str += "(";
_tree2str(root->left,str);
str += ")";
}
if(root->right)
{
str += "(";
_tree2str(root->right,str);
str += ")";
}
}
string tree2str(TreeNode* root) {
string s;
_tree2str(root,s);
return s;
}
};