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 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 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()); } }
public void add(int newNumber) { if (newNumber > this.value) { if (right == null) { right = new IntegerTreeNode(newNumber); } else { right.add(newNumber); } } else { if (left == null) { left = new IntegerTreeNode(newNumber); } else { left.add(newNumber); } } }
public boolean contains(int n) { if (n == this.value) { return true; } else if (n > this.value) { if (right == null) { return false; } else { return right.contains(n); } } else { if (left == null) { return false; } else { return left.contains(n); } } }
public void ToStringAll() { if ((this.left == null) && (this.right == null)) { String a = "L[] R[]"; System.out.print(a); } else if ((this.left == null) && (this.right != null)) { String a = " L[]R[" + this.right.value + "] "; System.out.print(a); right.ToStringAll(); } else if ((this.right == null) && (this.left != null)) { String a = " L[" + this.left.value + "R[]"; System.out.print(a); left.ToStringAll(); } else if ((this.right != null) && (this.left != null)) { String a = " L[" + this.left.value + "R[" + this.right.value + "] "; System.out.print(a); right.ToStringAll(); left.ToStringAll(); } }
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()); } } }
public String toString() { return firstNode.setToString(); }
public boolean containsVerbose(int n) { return firstNode.containsVerbose(n); }
public boolean contains(int n) { return firstNode.contains(n); }
public void add(int n) { if (firstNode == null) firstNode = new IntegerTreeNode(n); // error: identifier expected else firstNode.add(n); }
public int getMax() { if (right == null) { return this.value; } else return right.getMax(); }
public int getMin() { if (left == null) { return this.value; } else return left.getMin(); }
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; }