private IntegerTreeNode rotate(IntegerTreeNode tree) { if (tree == null) { return null; } IntegerTreeNode head = tree; if (treeDepth(tree.getLeft()) > treeDepth(tree.getRight())) { tree = tree.getLeft(); head.setLeft(tree.getRight()); tree.setRight(head); } else { tree = tree.getRight(); head.setRight(tree.getLeft()); tree.setLeft(head); } return tree; }
private IntegerTreeNode rebalance(IntegerTreeNode tree) { if (tree == null) { return null; } tree.setLeft(rebalance(tree.getLeft())); tree.setRight(rebalance(tree.getRight())); if (unbalanced(tree)) { tree = rotate(tree); } return tree; }
private void addNode(int num, IntegerTreeNode node) { if (node.getValue() > num) { if (node.getLeft() == null) { node.setLeft(new IntegerTreeNode(num)); } else { addNode(num, node.getLeft()); } } else { if (node.getRight() == null) { node.setRight(new IntegerTreeNode(num)); } else { addNode(num, node.getRight()); } } }