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

/**
 * 二叉树节点类
 * */
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);
    }
  }
}

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

时间: 2024-10-07 02:22:25

爪哇国新游记之二十四----二叉树的相关文章

爪哇国新游记之二十二----算术表达式计算求值

代码: import java.util.ArrayList; import java.util.List; // 辅助类 class Item{ String value; boolean isNumber; public Item(String value,boolean isNumber){ this.value=value; this.isNumber=isNumber; } public Item(char c,boolean isNumber){ this.value=String.

爪哇国新游记之二十八----从url指定的地址下载一个文件到本地

package download; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import java.util.zip.GZIPInputStream; /** * 从url指定的地址下载一个文件到本地 * 2014

爪哇国新游记之二十五----图及其遍历查找

代码: import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; // 顶点类 class Vertex{ String name;// 名称 boolean visited;// 是否已访问

爪哇国新游记之二十----将数字转换成汉子大写形式

/** * 辅助类 * 用于记载字符和位置 * */ class CharPos{ char c; int pos; public CharPos(char c,int pos){ this.c=c; this.pos=pos; } } /** * 将数字转化成汉字大写形式 * */ public class CnNumMaker { private String integerPart;// 整数部分 private String decimalPart;// 小数部分 private Sta

爪哇国新游记之二十一----快算24

四张牌,通过四则运算得到24,一个数限用一次,快者为胜. 代码: import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * 快算24 * @author heyang * */ public class Caculator{ private double anticipate;// 预期结果 private double op1;// 操作数一

爪哇国新游记之二十七----数组的二分查找

代码: import java.util.ArrayList; import java.util.List; public class Bit { int max; int min; int[] arr; public Bit(int[] arrInput) { // 找出极值 for (int i = 0; i < arrInput.length; i++) { if (max < arrInput[i]) { max = arrInput[i]; } if (min > arrInp

爪哇国新游记之十四----初试JDBC

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class A{ public static void search1(){ Connection conn=null; PreparedStatement ps=null; Resu

爪哇国新游记之十二----线程创建的两种形式

public class Thread1 extends Thread{ public void run(){ int i=0; while(i<10){ i++; System.out.println(i); } } public static void main(String[] args){ Thread1 t=new Thread1(); t.start(); } } public class Thread2 implements Runnable{ @Override public v

爪哇国新游记之十八----泛型栈类

import java.lang.reflect.Array; /** * 泛型栈 * * @param <T> */ public class Stack<T>{ private Class<T> type;// 栈元素所属的类 private int size;// 栈深度 private T[] arr;// 用数组存储 private int top;// 栈顶元素的下标 public Stack(Class<T> type,int size){ t