二叉查找树是以一种特殊的二叉树。它的特征是,没一个节点左子树中结点的值都小于该结点的值,右子树中结点的值都大于该结点的值。

  二叉查找树的主要操作是插入元素、删除元素、遍历元素。

  插入元素:如果二叉树是空的,使用新元素创建一个根节点;否则,为新元素寻找父节点。如果新元素的值小于父节点的值,则将新元素的结点设置为父节点的左孩子;否则,将其设为右孩子。

  遍历元素:遍历主要有中序、前序、后序、深度优先、广度优先等。

  下面这个类包括了结点的定义还有二叉树的定义。

package binaryTree;

public class BinaryTree {

 // 节点的定义
 private static class TreeNode {
  Object element;
  TreeNode left;
  TreeNode right;

  public TreeNode(Object o) {
   element = o;
  }
 }

 private TreeNode root;
 private int size = 0;

 public BinaryTree() {

 }

 public BinaryTree(Object[] objects) {
  for (int i = 0; i < objects.length; i++) {
   insert(objects[i]);
  }
 }

 public boolean insert(Object o) {
  if (root == null) {
   root = new TreeNode(o);
  } else {
   TreeNode parent = null;
   TreeNode current = root;
   while (current != null) {
    if (((Comparable) o).compareTo(current.element) < 0) {
     parent = current;
     current = current.left;
    } else if (((Comparable) o).compareTo(current.element) > 0) {
     parent = current;
     current = current.right;
    } else {
     return false;
    }
   }
   if (((Comparable) o).compareTo(parent.element) < 0) {
    parent.left = new TreeNode(o);
   } else {
    parent.right = new TreeNode(o);
   }
  }
  size++;
  return true;
 }

 //中序遍历
 public void inorder(){
  inorder(root);
 }
 public void inorder(TreeNode root){
  if (root == null) {
   return;
  }
  inorder(root.left);
  System.out.println(root.element + " ");
  inorder(root.right);
 }
 
 //后序遍历
 public void postorder(){
  postorder(root);
 }
 
 public void postorder(TreeNode root){
  if (root == null) {
   return;
  }
  postorder(root.left);
  postorder(root.right);
  System.out.println(root.element +" ");
 }
 
 //前序遍历
 public void preorder(){
  preorder(root);
 }
 
 public void preorder(TreeNode root){
  if (root == null) {
   return;
  }
  System.out.println(root.element + " ");
  preorder(root.left);
  preorder(root.right);
 }
 
 public int getSize(){
  return size;
 }
 
 }