package fr.umlv.ir2;

public class BinaryTree  {
  static class BinaryTreeNode {
    private final int value;
    private BinaryTreeNode left;
    private BinaryTreeNode right;
    
    BinaryTreeNode(int value) {
      this.value = value;
    }
    
    void add(int newValue) {
      if (newValue == value) {
        // the value already exists
        return;
      }
      if (newValue < value) {
        if (left==null) {
          left = new BinaryTreeNode(newValue);
        } else {
          left.add(newValue);
        }
      } else {
        if (right==null) {
          right = new BinaryTreeNode(newValue);
        } else {
          right.add(newValue);
        }
      }
    }
    
    void intoStringBuilder(StringBuilder builder){
      if (left != null) {
        left.intoStringBuilder(builder);
      }
      builder.append(" ").append(value);
      if (right != null) {
        right.intoStringBuilder(builder);
      }
    }
  }
  
  private BinaryTreeNode root;
  
  public void add(int i) {
    if (root == null) {
      root = new BinaryTreeNode(i);
    } else {
      root.add(i);
    }
  }
  
  // ...
}