将二叉树输出为括号字符串
题目描述:
需要采用前序遍历的方式,将二叉树转换为一个由括号和整数组成的字
符串。空间点则用一对空括号“()”表示。而且需省略所有不影响字符
串与原始二叉树之间的一对一映射关系的空括号对。
示例1:
解释:原本是“1(2(4)())(3())”,在省略所有不必要的空括号对之后,将变为"1(2(4))(3)"
示例2:
解题思路 :
通过理解题意和对比示例,可以发现二叉树根节点值正常输出,从第二层开始输出数值前需在值前面加"(",且当一直有左子树时递归输出,直到叶子节点才输出")",右子树同理。但值得注意的是:当一个节点只有左子树没有右子树时,右子树的"()“省略即可,但当一个节点只有右子树而没有左子树时,在遍历输出右子树之前需先输出”()"。
leetcode代码实现:
//当前代码实现的是普通二叉树
public class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val=x;}
}
class Solution{
public String tree2str(TreeNode t){
StringBuilder res=new StringBuilder();
tree2str(t,res);
return res.toString();
}
private void tree2str(TreeNode node,StringBuilder res){
if(node==null) return;
res.append(node.val);
if(node.left!=null){
res.append("(");
tree2str(node.left,res);
res.