平衡二叉搜索树

Balance a binary search tree

我正在尝试在 Java 中实现二叉搜索树 class,如果存在高度差异,该方法可以重新平衡树。我试图通过首先将节点的值存储在列表中(class 的属性)来实现。

然后我想取这个列表的中间元素并将其分配给树的根。在此之后,我获取列表的左右部分,并递归地对根的左右子节点执行相同的操作,依此类推。

虽然我的算法似乎不起作用,但我不明白我做错了什么。我想知道是否有人可以看一下我的代码并解释问题出在哪里?我所做的基本上是将树元素的有序列表(class 的一个属性)和根传递给下面的函数:

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;
}

亲切的问候,

Java 方法调用是“按值调用”。这意味着更改参数(如 n 在您的情况下)在方法之外没有任何影响。

尝试像这样定义你的方法

public BinaryNode<E> build(List<E> list) { ... }

尝试调查 AVL 树

一些有用的链接: https://en.wikipedia.org/wiki/AVL_tree https://www.geeksforgeeks.org/avl-tree-set-1-insertion/