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()); } } }
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 boolean unbalanced(IntegerTreeNode node) { if (node == null) { return false; } int left = treeDepth(node.getLeft()); int right = treeDepth(node.getRight()); return (Math.abs(left - right) > 1); }
private int treeDepth(IntegerTreeNode node) { if (node == null) { return 0; } int left = treeDepth(node.getLeft()); int right = treeDepth(node.getRight()); return left > right ? left + 1 : right + 1; }
private String toString(StringBuilder builder, IntegerTreeNode tree) { if (tree == null) { return builder.toString(); } builder.append(toString(builder, tree.getLeft())); builder.append(toString(builder, tree.getRight())); return tree.toString(); }
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 boolean contains(int num, IntegerTreeNode tree) { if (tree == null) { return false; } if (tree.getValue() == num) { return true; } if (tree.getValue() < num) { return contains(num, tree.getRight()); } else { return contains(num, tree.getLeft()); } }
private boolean containsVerbose(int num, IntegerTreeNode tree) { System.out.println(tree); if (tree == null) { return false; } if (tree.getValue() == num) { return true; } if (tree.getValue() < num) { return contains(num, tree.getRight()); } else { return contains(num, tree.getLeft()); } }