public void balance() {
LinkedList<Node> tree = new LinkedList<Node>();
sortTree(tree, root);
root = balanceTree(tree, 0, (size() - 1));
}
private Node balanceTree(LinkedList<Node> tree, int first, int last) {
if (first > last) {
return null;
}
int temp = first + last;
int mid = temp / 2;
if (temp % 2 == 1) {
mid++;
}
Node midNode = tree.get(mid);
midNode.left = balanceTree(tree, first, mid - 1);
midNode.right = balanceTree(tree, mid + 1, last);
return midNode;
}
private void sortTree(LinkedList<Node> tree, Node n) {
if (n == null) {
return;
}
sortTree(tree, n.left);
tree.add(n);
sortTree(tree, n.right);
}
This properly balances BST's but it does not update the nodes sizes, can I get some help on where I should be trying to update the node sizes?