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

请问以下两段程序为什么输出结果不一样?

全局:

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

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

x
在做Validate Binary Search Tree那道题时,很多都用以下这段程序:
public boolean isValidBST(TreeNode root) {  
    ArrayList<Integer> pre = new ArrayList<Integer>();  
    pre.add(null);  
    return helper(root, pre);  
}  

private boolean helper(TreeNode root, ArrayList<Integer> pre)  
{  
    if(root == null)  
        return true;
   
    boolean left = helper(root.left,pre);
   
    if(pre.get(pre.size()-1)!=null && root.val<=pre.get(pre.size()-1))  
        return false;  
    pre.add(root.val);  
   
    boolean right = helper(root.right,pre);
    return left && right;  
}

我习惯用void helper,所以改了一下:
    public boolean isValidBST(TreeNode root) {
        List<Integer> pre = new ArrayList<Integer>();  
        pre.add(null);  
        boolean[] result = new boolean[1];
        helper(root, result, pre);
        return result[0];
    }

    private void helper(TreeNode root, boolean[] result, List<Integer> pre) {
        if (root == null) {
            result[0] = true;
            return;
        }
        
        helper(root.left, result, pre);
        
        if(pre.get(pre.size()-1)!=null && root.val<=pre.get(pre.size()-1)){
            result[0]=false;  
            return;            
        }
        pre.add(root.val);         
        
        helper(root.right, result, pre);

        if(result[0]==false){
            result[0]=true;
            return;
        }
    }
      
但是输出结果总是不对,不知道哪里弄错了?谢谢

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

本版积分规则

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