1.题目解析
题目来源:606.根据二叉树创建字符串
测试用例
2.算法原理
根据上面的题目我们知道这里需要根据前序遍历来创建字符串,并且需要将每棵子树使用括号括起来,但是要根据实际情况省略括号,比如当右子树为空左子树为空就可以省略,而左子树为空右子树不为空不可以省略,还有左子树不为空右子树为空可以省略右子树的括号,两个子树都不为空都不可以省略括号,这里我们使用按位或就可以很好的判断是否省略左子树的括号,而右子树的括号只需要判断右子树是否为空,为空则省略反之不省略即可
3.实战演示
/**
* 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 str;
if(root == nullptr)
{
return str;
}
else
{
str += to_string(root->val);
}
//左不为空时右为空不能省略括号
//左为空而右不为空不能省略括号
if(root->left || root->right)
{
str += '(';
str += tree2str(root->left);
str += ')';
}
//右不为空才保留括号
if(root->right)
{
str += '(';
str += tree2str(root->right);
str += ')';
}
return str;
}
};