# Leetcode [No.606] Construct String from Binary Tree (EASY)
## 題目
https://leetcode.com/problems/construct-string-from-binary-tree/description/?envType=daily-question&envId=2023-12-12
## 思路
+ 這個題目在描述的時候有一點問題,我也是看了討論區才知道題目想要幹嘛...
+ 
+ 根據 `yogeshwarb`所描述的,我們只要在**有右子樹但無左子樹**的時候加一個()即可。
```c++
/**
* 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 ans = "";
preorderTraverse(root, ans);
return ans;
}
void preorderTraverse(TreeNode* node, string& ans)
{
if(node == nullptr) return;
else
{
// cout << node->val;
string str = to_string(node->val);
ans+= str;
if(node->left != nullptr)
{
// cout << "(";
ans+= "(";
preorderTraverse(node->left, ans);
// cout << ")";
ans+=")";
}
if(node->right != nullptr)
{
if(node->left == nullptr)
{
ans+="()";
}
ans+="(";
// cout << "(";
preorderTraverse(node->right, ans);
// cout << ")";
ans+=")";
}
}
}
};
```
### 解法分析
+ time complexity: O(lgn) // tree based
### 執行結果

---
## 改良:
+ 改成沒那麼白癡的版本,把left的()加在preorderTraverse的外面
```c++=
/**
* 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 ans = "";
preorderTraverse(root, ans);
return ans;
}
void preorderTraverse(TreeNode* node, string& ans)
{
if(node == nullptr) return;
else
{
string str = to_string(node->val);
ans+= str;
if (node->left == nullptr && node->right == nullptr)
{
return;
}
else // there exist left or exist right
{
ans += "(";
if(node->left)
{
preorderTraverse(node->left, ans);
}
ans += ")";
if(node->right)
{
ans += "(";
preorderTraverse(node->right, ans);
ans += ")";
}
}
}
}
};
```
### 執行結果
會稍微慢一些..
