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;}
};