我正在尝试用Java实现二进制搜索树类,该方法可以在高度不同时重新平衡树。我正在尝试通过首先将节点的值存储在List(类的属性)中来做到这一点。
然后,我想获取此列表的中间元素,并将其分配给树的根。此后,我将列表的左,右部分作为对象,然后对根的左,右子代递归执行相同的操作,等等。
我的算法似乎无法正常运行,而且我不明白自己在做什么错。我想知道是否有人可以看一下我的代码并解释问题所在?我要做的基本上是将树的元素(类的属性)和根的有序列表传递到下面的函数中:
public void build(BinaryNode<E> n,List<E> list) {
int idx = (int)Math.floor(list.size()/2);
if(n!=null) {
n.element = list.get(idx);
} else if(n==null) {
n = new BinaryNode<E>(list.get(idx));
}
if(!list.subList(0,idx).isEmpty()) {
build(n.left,list.subList(0,idx));
}
if(!list.subList(idx+1,list.size()).isEmpty() ){
build(n.right,list.subList(idx+1,list.size()));
}
return;
}
亲切的问候,
答案 0 :(得分:1)
Java方法调用是“按值调用”。这意味着更改参数(在您的情况下为n
)在方法之外无效。
尝试这样定义您的方法
public BinaryNode<E> build(List<E> list) { ... }
答案 1 :(得分:1)
尝试调查有关AVL树的信息
一些有用的链接: https://en.wikipedia.org/wiki/AVL_tree https://www.geeksforgeeks.org/avl-tree-set-1-insertion/