点击链接即可查看题目: 606. 根据二叉树创建字符串 - 力扣(LeetCode)
一、题目
给你二叉树的根节点
root
,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对
"()"
表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:
输入:root = [1,2,3,4] 输出:"1(2(4))(3)" 解释:初步转化后得到 "1(2(4)())(3()())" ,但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)" 。示例 2:
输入:root = [1,2,3,null,4] 输出:"1(2()(4))(3)" 解释:和第一个示例类似,但是无法省略第一个空括号对,否则会破坏输入与输出一一映射的关系。
二、解题思路以及代码
to_string()函数是将int转化为string
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
string tree2str(TreeNode* root)
{
string s;
if(nullptr == root)
return s;
s += to_string(root->val);
//if(root->left || root->right)
//也可以写成这样
if(nullptr != root->left || nullptr !=root->right)
{
s += '(';
s += tree2str(root->left);
s += ')';
}
//if(root->right)
//也可以写成这样
if(nullptr != root->right)
{
s += '(';
s += tree2str(root->right);
s += ')';
}
return s;
}
};
方法二可能更好理解
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void Inorder(TreeNode*root,string& s)
{
if(nullptr == root)
return;
s += to_string(root->val);
if(nullptr != root->left || nullptr !=root->right)
{
s += '(';
Inorder(root->left,s);
s += ')';
}
if(nullptr != root->right)
{
s += '(';
Inorder(root->right,s);
s += ')';
}
}
string tree2str(TreeNode* root)
{
string s;
Inorder(root, s);
return s;
}
};