Skip to main content

cs2381 Notes: 22 Build a BST

·1 min

Building a Binary Search Tree

import java.util.function.Consumer;


// BST merge
    @Override
    public BinTree<T> merge(BinTree<T> that) {
        return that;
    }

// Foreach
    @Override
    public void each(Consumer<T> _op) {
       // do nothing 
    }
}

// Improved remove
    @Override
    public BinTree<T> remove(T item) {
        int cmp = item.compareTo(this.data);
        if (cmp == 0) {
            return this.left.merge(this.right);
        }
        if (cmp < 0) {
            return new BinBranch<T>(this.data, this.left.remove(item), this.right);
        }
        else {
            return new BinBranch<T>(this.data, this.left, this.right.remove(item));
        }
    }

    @Override
    public BinTree<T> merge(BinTree<T> that) {
        if (that.isLeaf()) {
            return this;
        }

        return this.insert(that.data())
            .merge(that.left())
            .merge(that.right());
    }

// Foreach
    @Override
    public void each(Consumer<T> op) {
        this.left().each(op);
        op.accept(this.data());
        this.right().each(op); 
    }
}

And try it:

    public static void main(String[] args) {
        var xs = BinTree.<Integer>makeEmpty();
        xs = xs.insert(5);
        xs = xs.insert(3);
        xs = xs.insert(1);
        xs = xs.insert(4);

        var ys = new ArrayList<Integer>();
        xs.each((xx) -> ys.add(xx));

        System.out.println("" + ys);
    }

Once we finish out the BST as a set, let’s move on to looking at

  • ALists
  • TreeMap
public record AssocList<K, V>(ConsList<Pair<K, V>> data) {
    // methods
}

record Pair<K, V>(K key, V val) {
    // pass
}