码迷,mamicode.com
首页 > 其他好文 > 详细

爪哇国新游记之二十四----二叉树

时间:2014-08-01 15:47:41      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   for   art   ar   div   

/**
 * 二叉树节点类
 * */
class Node<T extends Comparable> {
  public Node(T data){
    this.data=data;
  }
  
  T data;
  Node<T> left;
  Node<T> right;
}

/**
 * 二叉树类
*/
public class BinaryTree<T extends Comparable> {

  /**
   * 根節點
   */
  private Node<T> root;

  /**
   * 插入一個值
   * @param value
   */
  public void insert(T value) {
    Node<T> node = new Node<T>(value);

    if (root == null) {
      root = node;
    } else {
      Node<T> curr = root;
      Node<T> parrent;

      while (true) {
        parrent = curr;

        if (value.compareTo(curr.data) >= 0) {
          curr = curr.right;

          if (curr == null) {
            parrent.right=node;
            return;
          }
        } else {
          curr = curr.left;

          if (curr == null) {
            parrent.left=node;
            return;
          }
        }
      }
    }
  }

  /**
   * 尋找一個值對應的節點
   * @param value
   * @return
   */
  public Node<T> find(T value) {
    Node<T> curr = root;

    while (curr.data.equals(value) == false) {
      if (value.compareTo(curr.data) > 0) {
        curr = curr.right;
      } else {
        curr = curr.left;
      }

      if (curr == null) {
        return null;
      }
    }

    return curr;
  }

  /**
   * 輸出
   *
   */
  public void printAll() {
    System.out.println("--------------先序遍历------------------");
    preOrder(root);
    System.out.println("--------------中序遍历------------------");
    inorder(root);
    System.out.println("--------------后序遍历------------------");
    postOrder(root);
  }
  
  /**
   * 先序遍歷
   * @param node
   */
  private void preOrder(Node<T> node) {
    if (node != null) {
      System.out.println(node.data);
      preOrder(node.left);      
      preOrder(node.right);
    }
  }

  /**
   * 中序遍歷
   * @param node
   */
  private void inorder(Node<T> node) {
    if (node != null) {
      inorder(node.left);
      System.out.println(node.data);
      inorder(node.right);
    }
  }
  
  /**
   * 后序遍歷
   * @param node
   */
  private void postOrder(Node<T> node) {
    if (node != null) {
      postOrder(node.left);     
      postOrder(node.right);
      System.out.println(node.data);
    }
  }

  public static void main(String[] args) {
    
    Integer[] arr={31,25,47,42,50};
    
    // 以數組2為基礎創建二叉樹
    BinaryTree<Integer> tree1=new BinaryTree<Integer>();   
    for(Integer i:arr){
      tree1.insert(i);
    }
    
    tree1.printAll();
    
    
    String[] arr02={"Ceaser","Andy","Martin","Bill","Felex","Fowler","Green","Alice","Gates"};
    
    // 以數組2為基礎創建二叉樹
    BinaryTree<String> tree=new BinaryTree<String>();   
    for(String str:arr02){
      tree.insert(str);
    }
    
    tree.printAll();
    
    // 將在二叉樹中不存在的元素放入鏈錶
    String[] arr01={"Andy","Bill","Cindy","Douglas","Felex","Green"};
    List<String> ls=new ArrayList<String>();    
    for(String str:arr01){
      if(tree.find(str)==null){
        ls.add(str);
      }
    }
    
    // 輸出
    System.out.println("--------------二叉樹中不存在的元素有------");
    for(String str:ls){
      System.out.println(str);
    }
  }
}

 

爪哇国新游记之二十四----二叉树,布布扣,bubuko.com

爪哇国新游记之二十四----二叉树

标签:style   blog   color   os   for   art   ar   div   

原文地址:http://www.cnblogs.com/xiandedanteng/p/3884976.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!