java - 如何修复二叉树实现的 StackOverflow 错误?

标签 java algorithm binary-search-tree

<分区>

这是一个二叉树实现的例子 here . 这段代码工作正常。 但是我可以在 add 方法中将根创建为单个一次性节点吗?

代替

public void add(int value) {
 root = addRecursive(root, value);
}

我愿意

public void add(int value) {
 if (root == null) {
  root= new Node(value);  
  }
// then i add left- and right-leafs recursively
if (value < root.value) {
   root.left = addRecursive(root, value);        
} else if (value > root.value) {
  root.right= addRecursive(root, value); 
 }
}

如果我添加 3 个或更少的节点 - 没关系

bt.add(2);
bt.add(1);
bt.add(3);

但是如果我添加超过 3 个节点,我会因为递归函数而得到 StackOverflow 错误

private Node addRecursive(Node current, int value) {      
 if (current == null) {     
  return new Node(value);
  }    
 if (value < current.value) {
  current.left = addRecursive(current.left, value);     
  } else if (value > current.value) {
    current.right = addRecursive(current.right, value);      
  }  
  return current;
}

最佳答案

必须是

addRecursive(root.left, value)
addRecursive(root.right, value)

即不是 root

关于java - 如何修复二叉树实现的 StackOverflow 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56683575/

相关文章:

java - 读取文件中所有剩余字节

java - ClassPathResource 没有得到类路径

algorithm - 坐标压缩

algorithm - 查找图形的集团覆盖

c++ - 二叉搜索树 "contains"函数

java - 使用线程同时创建一个类的十个实例

java - 如何在 https 连接上检索 cookie?

algorithm - 多项目有界背包算法

c++ - 为什么我的 AVL 树排序算法比插入排序算法花费的时间更长?

c++ - 使用模板创建类的新实例,不知道如何处理错误