查看: 459|回复: 3
收起左侧

[学Java/C#] 449题一个问题

|只看干货 |学java/c#, 刷题

分享帖子到朋友圈
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   69% (603)
 
 
30% (261)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
[Java] 纯文本查看 复制代码
public class Codec {
    
    public StringBuilder postorder(TreeNode root, StringBuilder sb) {
        if (root == null)
            return sb;
        postorder(root.left, sb);
        postorder(root.right, sb);
        sb.append(root.val + ",");
        
        return sb;
    }

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        StringBuilder sb = postorder(root, new StringBuilder());
        if (sb.length() > 0)
            sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////
    
    public TreeNode helper(Integer lower, Integer upper, ArrayDeque<Integer> nums) {
        
        if (nums.isEmpty())
            return null;
        
        int val = nums.getLast();
        
        if (val < lower || val > upper)
            return null;

        nums.removeLast();
        TreeNode root = new TreeNode(val);
        
        root.right = helper(val, upper, nums);
        root.left = helper(lower, val, nums);
        
        return root;
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        
        if (data.isEmpty()) // value.length == 0;  
            return null;
        
        ArrayDeque<Integer> nums = new ArrayDeque<Integer>();
        
        for (String s : data.split(","))
            nums.add(Integer.valueOf(s));
        
        return helper(Integer.MIN_VALUE, Integer.MAX_VALUE, nums);
    }
}



想问下LeetCode 449题这个地方,32行的目的是什么呢?  如果超过范围,就返回null ?  什么时候回出现这个情况呢?


感谢各位大佬




补充内容 (2021-3-1 02:49):

https://youtu.be/V2zjW5AsSHQ   

评分

参与人数 1大米 +3 收起 理由
14417335 + 3

查看全部评分


上一篇:寻找LC contest rating 2200以上的朋友
下一篇:巨硬OA 高频题
wisdompeak2 2021-2-28 05:21:51 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   98% (499)
 
 
1% (8)    👎
helper这个函数里,我们期待用nums里面的数构造一个BST子树,nums.last()是根,并且这棵树有上下界的限制。如果不满足,说明无法构成这棵BST子树。

评分

参与人数 1大米 +2 收起 理由
14417335 + 2

查看全部评分

回复

使用道具 举报

twtypsj 2021-2-28 08:12:39 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (39)
 
 
2% (1)    👎
wisdompeak2 发表于 2021-2-28 05:21
helper这个函数里,我们期待用nums里面的数构造一个BST子树,nums.last()是根,并且这棵树有上下界的限制。 ...

有道理,zszszs

评分

参与人数 1大米 +1 收起 理由
blackrose + 1 赞一个

查看全部评分

回复

使用道具 举报

 楼主| techDiscussion 2021-2-28 14:27:59 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   69% (603)
 
 
30% (261)    👎
[Java] 纯文本查看 复制代码
public class Codec {

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        
        // root == null; 
        
        StringBuilder sb = new StringBuilder(); 
        
        helper1(root, sb); 
        
        return sb.toString(); 
    }
 
    public void helper1(TreeNode root, StringBuilder sb){
        
        if(root == null) return;    // we are doing postOrder --> left right middle 
        
        helper1(root.left, sb);
        helper1(root.right, sb);
        
        sb.append(root.val + ","); 
        
    }
    
    
    ////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////
    
    
    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
       
        if(data.isEmpty()) return null; 
        
        Deque<Integer> stack = new LinkedList<>(); 
        
        for(String curr : data.split(","))  stack.add(  Integer.valueOf(curr) ); 
         
        return helper2(Integer.MIN_VALUE, stack);         
    }
    
    public TreeNode helper2(int lowerBound, Deque<Integer> stack){
        
        if(stack.isEmpty()) return null; 
        
        int curr = stack.getLast(); 
        
        if(curr < lowerBound) return null; 
         
        stack.removeLast(); 
         
        TreeNode root = new TreeNode(curr); 
         
        root.right = helper2(curr, stack); 
        
        root.left  = helper2(lowerBound, stack); 
        
        return root;
    }
    
}


把代码更新了一下,其实根本不需要用到upper bound

评分

参与人数 1大米 +1 收起 理由
14417335 + 1

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■拉群请前往同学同事飞友|拉群结伴版块,其他版块拉群,帖子会被自动删除
■论坛不能删帖,为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://tools.1point3acres.com/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

>
快速回复 返回顶部 返回列表