2017-06-16 76 views
1

我想实现AVL tree.I'm在高度方法stackOverFlow。我试着用少量的输入工作。然而,当我尝试大规模的投入,它暗恋。这是我的代码。AVL树高度方法StackOverFlow Erroe

private int height(Node<T> node){ 

     if(!isEmpty() && node != null){ 
      if(isleaf(node)) 
      return 1; 
     else{ 
      int p = height(node.left); 
      int q = height(node.right); 
      if(p > q) 
       return p + 1; 
      else 
       return q + 1; 
     } 
    } 
    return 0; 
} 
+1

你确定树是否有效?另外,它是如何工作的?那里可能有一个递归循环。你可以发布堆栈跟踪,以便我们可以看到发生了什么? – templatetypedef

+0

isEmpty是布尔方法,在线程“main”中返回root == null.Exception java.lang.StackOverflowError \t at ATree.height(ATree.java:35)// int p = height(node.left);在ATree.height(ATree.java:36)处的 。 // int q = height(node.right); – ifte

回答

0

如果你的树有循环引用,就会发生这种情况。检查树结构。调试 - 在遍历节点时分配唯一值并进行打印。

+0

我认为你是对的。我正在尝试阅读的文件有很多重复的数字。我的AVL工作到某些输入然后它粉碎。有什么方法可以处理AVL树中的重复? – ifte

+0

正在创建和重新使用节点对象的代码段存在问题。您应该为每个节点创建新的实例。重用将创建一个循环引用。 – Gaurav