Пример #1
0
 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());
     }
   }
 }
Пример #2
0
 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;
 }
Пример #3
0
 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);
 }
Пример #4
0
 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;
 }
Пример #5
0
  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();
  }
Пример #6
0
 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;
 }
Пример #7
0
 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());
   }
 }
Пример #8
0
 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());
   }
 }