刷题小记 (15) LeetCode 606 根据二叉树创建字符串

LeetCode 606

2020.8.15

我的通过代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    String str = "";
    public String tree2str(TreeNode t) {
        traverse(t);
        return str;

    }

    void traverse(TreeNode t) {
        if(t==null) return;
        if("".equals(str)) {
            str+=t.val;
            if(t.left==null&t.right==null) return;
            if(t.left==null) str+="()";
            traverse(t.left);
            traverse(t.right);
        } else if(t.left==null&&t.right!=null) {
            str+="(";
            str+=t.val;
            str+="()";   
            traverse(t.right);
            str+=")";
        } else {
            str+="(";
            str+=t.val;
            traverse(t.left);   
            traverse(t.right);

            str+=")";
        }
    }
}

还是突出一个暴力。

这道题并不难,但是我考虑问题实在是太不全面了,漏掉了比较特殊的情况,导致提交了三次才通过。

一个是根节点没有左子树的情况,那么左边必须要有一组括号来表示左子树为空,这一点我没想到。

另一个是只有根节点,就整棵树只有这么一个节点。对刚刚那种情况的修改不够泛用,没包含这种情况,导致程序运行结果出错。

还是要多思考思考可能出现的问题。

官方题解

可能出现的的情况:

  1. 如果当前节点有两个孩子,那我们在递归时,需要在两个孩子的结果外都加上一层括号;

  2. 如果当前节点没有孩子,那我们不需要在节点后面加上任何括号;

  3. 如果当前节点只有左孩子,那我们在递归时,只需要在左孩子的结果外加上一层括号,而不需要给右孩子加上任何括号;

  4. 如果当前节点只有右孩子,那我们在递归时,需要先加上一层空的括号 () 表示左孩子为空,再对右孩子进行递归,并在结果外加上一层括号。

官方代码如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public String tree2str(TreeNode t) {
        if(t==null)
            return "";
        if(t.left==null && t.right==null)
            return t.val+"";
        if(t.right==null)
            return t.val+"("+tree2str(t.left)+")";
        return t.val+"("+tree2str(t.left)+")("+tree2str(t.right)+")";   
    }
}

上述官方题解转自LeetCode。
链接:https://leetcode-cn.com/problems/construct-string-from-binary-tree/solution/gen-ju-er-cha-shu-chuang-jian-zi-fu-chuan-by-leetc/

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值