题目描述:
题目的意思是子节点需要用()来包裹。举例来说,二叉树[root,left,right],则转换为root(left)(right)。如果只有left为空节点,则输出root()(right);如果只有right为空节点则可以忽略右节点的(),输出为root(left)
思路:
递归
前序遍历
先判断根节点,把根节点的值,放入到字符串中,
然后再判断左节点,如果左节点不为空,则+“(”+递归的左节点+“)”
反之+“()”
最后判断右节点,如果右节点不为空,则+“(”+递归的右节点+“)”
反之不在+字符串
代码如下:
c++:
/**
* 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 tree2str(TreeNode* t) {
if(!t) return "";
if(t->left==NULL&&t->right==NULL)
return to_string(t->val);
string res=to_string(t->val);
if(t->left!=NULL)
res+="("+tree2str(t->left)+")";
else res+="()";
if(t->right!=NULL)
res+="("+tree2str(t->right)+")";
return res;
}
};
Python:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def tree2str(self, t: TreeNode) -> str:
if not t:return ""
if not t.left and not t.right:return str(t.val)
res=str(t.val)
if t.left:
res+="("+self.tree2str(t.left)+")"
else:res+="()"
if t.right:
res+="("+self.tree2str(t.right)+")"
return res