字符串形式的树的创建(Java)

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(")");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值