当前位置: 代码迷 >> Eclipse >> Exception in thread "main" java.lang.StackOverflowError!异常,搞到凌晨三点没找到异常在哪,真心求指教
  详细解决方案

Exception in thread "main" java.lang.StackOverflowError!异常,搞到凌晨三点没找到异常在哪,真心求指教

热度:505   发布时间:2016-04-23 00:19:57.0
Exception in thread "main" java.lang.StackOverflowError!!!错误,搞到凌晨三点没找到错误在哪,真心求指教
public void print(Node root,int one,List<Integer> path,int tmpsum){
if(this.root==null){
return;
}

tmpsum += root.value;
path.add(this.root.value);//报错指的这一行(共两行)

boolean leaf = (root.left==null&&root.right==null);

if(leaf&&tmpsum==one){
for(int i:path){
System.out.print(i+"->");
}
System.out.println("end");
}

print(this.root.left,one,path,tmpsum);//报错指的这一行(共两行)
print(this.root.right,one,path,tmpsum);

path.remove(path.size()-1);
}
------解决思路----------------------
把public void print(Node root,int one,List<Integer> path,int tmpsum)方法中的this去掉
this.root是指当前访问对象的root,而实际我们要用到的这个方法中的root
如果是this.root这样总是取跟节点就死循环了
public void print(Node root,int one,List<Integer> path,int tmpsum){
        if(root==null){
            return;
        }
        tmpsum += root.value;
        path.add(root.value);

        boolean leaf = (root.left==null&&root.right==null);

        if(leaf&&tmpsum==one){
            for(int i:path){
                System.out.print(i+"->");
            }
            System.out.println("end");
        }

        print(root.left,one,path,tmpsum);
        print(root.right,one,path,tmpsum);

        path.remove(path.size()-1);
    }

------解决思路----------------------
参考楼上的。
  相关解决方案