题目链接:根据二叉树创建字符串
题目描述
给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。
空节点使用一对空括号对 “()” 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
题目分析
根据题意,这里需要将二叉树的各个节点的值按照前序遍历的方式,转化为一个字符串。其中如果某个节点为空,则需要用()空括号表示。如果右子树为空则空括号可以省略,左子树为空但是右子树不为空则括号不能省略。
于是,代码我们可以先创建一个string类型的字符串来存放返回值,然后采用递归的方式,根据前序遍历——根、左、右的顺序递归形成字符串。具体代码实现如下:
代码实现
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 ret;
_tree2str(root, ret);
return ret;
}