根据二叉树创建字符串
思路:需要注意的是左右子树的处理,如果左子树为空的话且右子树不为空,要添加一组()来区分左右子树,如果是右树为空则不用处理
class Solution {
public:
string tree2str(TreeNode* root) {
if(root == nullptr)
return string(); //返回匿名对象
string str;
str += to_string(root->val);//用to_string把整数转换为字符
//1,左不空或左边为空,右边不为空
if(root->left || root->right)
{
str += '(';
str += tree2str(root->left);
str += ')';
}
//2,右不为空
if(root->right)
{
str += '(';
str += tree2str(root->right);
str += ')';
}
return str;
}
};
我们可以注意下这个函数的返回值是string,我们没有用到引用,如果这个树的结构比较大,就会存在大量的string的深拷贝,如何减少深拷贝呢?
我这里的方法是用一个子函数
class Solution {
public:
string tree2str(TreeNode* root) {
string str;
_tree2str(root, str);
return str;
}
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