📣 独立日限时特惠: VIP通行证立减$68
查看: 1599| 回复: 8
跳转到指定楼层
上一主题 下一主题
收起左侧

关于java中pass int和int[]的问题

全局:

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

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

x
下面这两道题,一道需要pass int[], 一道pass int就可以:

1. serialize and deserialize binary tree:
    public TreeNode deserialize(String data) {
        nodes=data.split(","));
        int[] index = new int[1];
        index[0]=0;
        return buildTree(nodes,index);
    }
    private TreeNode buildTree(String[] arr, int[] index) {      
        if (arr == null) {
            return null;            
        }
        
        if (index[0] >= arr.length)
            return null;
        
        String val = arr[index[0]];
        index[0]++;
        if (val.equals(NN)) {
            return null;   
        }
        else {
            TreeNode node = new TreeNode(Integer.valueOf(val));
            node.left = buildTree(arr, index);
            node.right = buildTree(arr, index);               
            return node;
        }
    }

2. level order:

    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        helper(res, root, 0);
        return res;
    }   
    public void helper(List<List<Integer>> res, TreeNode root, int height) {
        if (root == null)
                return;
        if (height >= res.size()) {
            res.add(new ArrayList<Integer>());
        }
        res.get(height).add(root.val);
        helper(res, root.left, height+1);
        helper(res, root.right, height+1);
    }

是不是因为第一道的index每次都需要往前走,所以不能用int,第二道和left和right每次的起始位置都一样?但是我把第一道的index换成int以后,用下面的也不行:
           node.left = buildTree(arr, index+1);
            node.right = buildTree(arr, index+2);

请大家帮忙解惑一下,谢谢!


上一篇:这几天 利口 网站打不开, why ?
下一篇:Leetcode 297/449 Serialize and Deserialize Binary Tree区别
🔗
O0ooo0O 2018-7-28 01:16:50 | 只看该作者
全局:
pass by reference了解一下?
回复

使用道具 举报

全局:
你第一题改成global variable就行了

评分

参与人数 1大米 +3 收起 理由
shuatizhe + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
 楼主| shuatizhe 2018-7-28 09:51:24 | 只看该作者
全局:
我试过global  variable,是可以。我知道int[] 和 int的区别是一个是pass by ref,一个pass by val,但是可能我对dfs运行步骤还不是很清楚,比如同样都是用int,第一道用以下这个就不行:
           node.left = buildTree(arr, index+1);
           node.right = buildTree(arr, index+2);
而第二道用下面这个就可以:
        helper(res, root.left, height+1);
        helper(res, root.right, height+1);
回复

使用道具 举报

全局:
shuatizhe 发表于 2018-7-28 09:51
我试过global  variable,是可以。我知道int[] 和 int的区别是一个是pass by ref,一个pass by val,但是可 ...

你回复的时候点一下回复, 才有提醒。

根据你的改写,我有种直觉你不是特别懂这两个代码怎么回事。。

他们两个用index的方式是不一样, 更重要的是理由也不一样。。

能解释清楚这两段代码是什么流程么?跟你桌上的水杯解释一下看他听得懂么?
回复

使用道具 举报

🔗
 楼主| shuatizhe 2018-7-29 10:26:29 | 只看该作者
全局:
肥宅快乐水 发表于 2018-7-28 11:56
你回复的时候点一下回复, 才有提醒。

根据你的改写,我有种直觉你不是特别懂这两个代码怎么回事。。  ...

我试着解释一下,您看逻辑对不对哈:

第一道,给一个String[] 的 数组arr,需要把它变成二叉树。一开始把第数组的第0个元素赋给新的node:TreeNode node = new TreeNode(Integer.valueOf(val));,然后把第1个元素赋给node的左子树:node.left = buildTree(arr, index+1); 然后把第2个元素赋给node的右子树:node.right = buildTree(arr, index+2); 最后返回node。
第二道,给一个二叉树,把它按层遍历存到二维数组中。先从第0层开始,把当前node的值加到第0个数组中:res.get(height).add(root.val);,然后把该node的左子树的值加到第1层的数组中:helper(res, root.left, height+1);,再把该node的右子树加到第1层的数组中:helper(res, root.right, height+1);  
        
        
回复

使用道具 举报

全局:
shuatizhe 发表于 2018-7-29 10:26
我试着解释一下,您看逻辑对不对哈:

第一道,给一个String[] 的 数组arr,需要把它变成二叉树。一开 ...

您’就算了, 被这么称呼很奇怪。。


第一题你说的有点似是而非。。 其实第一题也是一个level order traversal,跟你在leetcode上看到的树的表示方法一样。 举例[1,#,3,4,#]就代表
    1
  /    \
#      3
       /  \
    4      #
这个函数index是数[1,#,3,4,#] 走到第几个了。。你再理解一下。 这个里面不能用primitive是因为他数字不会改, 出了函数就没了。

用了int[] 数组是因为这个数组里面的数字address被保留了,里面值改了, 或者global variable,也会保留住。

所以你说 +1 或者 +2什么的其实没什么关系。


我感觉你第二题应该是明白的。
http://www.1point3acres.com/bbs/thread-432124-1-1.html

回复

使用道具 举报

🔗
 楼主| shuatizhe 2018-7-29 12:01:03 | 只看该作者
全局:
肥宅快乐水 发表于 2018-7-29 11:36
您’就算了, 被这么称呼很奇怪。。

那第二道的level为什么不用int[] 数组呢?,不好意思,我对这些概念不是很清楚,请轻拍啊:)
回复

使用道具 举报

全局:
shuatizhe 发表于 2018-7-29 12:01
那第二道的level为什么不用int[] 数组呢?,不好意思,我对这些概念不是很清楚,请轻拍啊:)

因为第二题里面你每一层是知道的, 你并不在意是哪一个元素, 只需要知道是哪一层。

这两个题的差别在于你用不同信息造树方法的差别。。

第一个方法是知道每层的数字, 每层的数字跟第一层的根有关系。
第二个方法是只知道根, 后面的全都不知道。

{:8_247:}{:8_247:}{:8_247:}{:8_247:}{:8_247:}{:8_247:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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