题目链接
https://leetcode.com/problems/construct-string-from-binary-tree/#/description
题意
给一个二叉树,要求用括号的形式表示出其前序遍历的结果。要取掉冗余的括号
思路
dfs
对于一个节点,有以下几种情况:
1. 空节点
2. 非空,无左右儿子:这时候我们将这个节点加入到结果直接返回即可
3. 非空,有左儿子,无右儿子:将该节点加入结果,递归调用左节点。
4. 非空,无左儿子,有右儿子:将该节点加入结果,递归调用左节点,递归调用右节点
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
string ans = "";
void dfs(TreeNode *p) {
if (!p) return;
ans += to_string(p->val);
if (!p->left && !p->right) return;
ans.push_back('(');
dfs(p->left);
ans.push_back(')');
if (p->right) {
ans.push_back('(');
dfs(p->right);
ans.push_back(')');
}
}
string tree2str(TreeNode* t) {
if (!t) return "";
dfs(t);
return ans;
}
};