public class CreateTree_StringForm {
//给你二叉树的根节点 root ,请你采用前序遍历的方式,
// 将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。
//1.
//输入:root = [1,2,3,4]
//输出:"1(2(4))(3)"
//解释:初步转化后得到 "1(2(4)())(3()())" ,
// 但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)" 。
//2.
//输入:root = [1,2,3,null,4]
//输出:"1(2()(4))(3)"
//解释:和第一个示例类似,但是无法省略第一个空括号对,
// 否则会破坏输入与输出一一映射的关系。
//根(左子树)(右子树)
//使用成员变量
private StringBuilder sb = new StringBuilder();
public String Create(TreeNode root){
//使用成员变量时,注意多组用例的情况,确保每次调用,都是从初始化的数据开始执行的
sb = new StringBuilder();
//为空则返回空
if(root==null){
return "";
}
//调用辅助函数
CreateHelper(root);
//递归完毕后,删除最外层的括号()
sb.deleteCharAt(0);
sb.deleteCharAt(sb.length()-1);
//返回字符串
return String.valueOf(sb);
}
//辅助递归方法
public void CreateHelper(TreeNode root){
//为空则返回
if(root==null){
return;
}
//把当前的根节点进行访问(访问就是拼接字符串
//先拼上(
sb.append("(");
sb.append(root.val);
//先递归左子树
CreateHelper(root.left);
//右子树之前先判定左子树是否为空,并且此时右子树不为空,此时就加上一组()
if(root.left==null&&root.right!=null){
sb.append("()");
}
//再递归右子树
CreateHelper(root.right);
//为确保递归子树的过程结果也在)里面
//所以此时在递归末尾再拼上)
sb.append(")");
}
}