二叉树排序方法1

class BinaryTree {
   class Node{       // 声明一个节点类
     private Comparable data ;   // 保存具体的内容
     private Node left ;       // 保存左子树
     private Node right ;     // 保存右子树
     public Node(Comparable data){
       this.data = data ;
    }
     public void addNode(Node newNode){
       // 确定是放在左子树还是右子树
       if(newNode.data.compareTo( this.data)<0){   // 内容小,放在左子树
         if( this.left== null){
           this.left = newNode ;   // 直接将新的节点设置成左子树
        } else{
           this.left.addNode(newNode) ;   // 继续向下判断
        }
      }
       if(newNode.data.compareTo( this.data)>=0){   // 放在右子树
         if( this.right== null){
           this.right = newNode ;   // 没有右子树则将此节点设置成右子树
        } else{
           this.right.addNode(newNode) ;   // 继续向下判断
        }
      }
    }
     public void printNode(){   // 输出的时候采用中序遍历
       if( this.left!= null){
         this.left.printNode() ;   // 输出左子树
      }
      System.out.print( this.data + "\t") ;
       if( this.right!= null){
         this.right.printNode() ;
      }
    }
  };
   private Node root ;     // 根元素
   public void add(Comparable data){   // 加入元素
    Node newNode = new Node(data) ;   // 定义新的节点
     if(root== null){   // 没有根节点
      root = newNode ;   // 第一个元素作为根节点
    } else{
      root.addNode(newNode) ; // 确定是放在左子树还是放在右子树
    }
  }
   public void print(){
     this.root.printNode() ;   // 通过根节点输出
  }

}

public class ComparableDemo {

   /**实际上比较器的操作就是经常说的二叉树的排序算法。
    * 原理:使用第一个元素作为根节点,后面的内容比根节点大,就放在左子树,后面的内容比根节点小,就放在右子树。
    *    
    */

   public static void main(String[] args) {
    BinaryTree bt = new BinaryTree() ;
    bt.add(8) ;
    bt.add(3) ;
    bt.add(3) ;
    bt.add(10) ;
    bt.add(9) ;
    bt.add(1) ;
    bt.add(5) ;
    bt.add(5) ;
    System.out.println( "排序之后的结果:") ;
    bt.print() ;


  }

}
二叉树排序方法2:

class Student {
   private String name ;
   private int age ;

   public Student(String name, int age) {
     super();
     this.name = name;
     this.age = age;
  }

   public String getName() {
     return name;
  }

   public void setName(String name) {
     this.name = name;
  }

   public int getAge() {
     return age;
  }

   public void setAge( int age) {
     this.age = age;
  }
  @Override
   public boolean equals(Object obj){   // 覆写equals方法
     if( this==obj){
       return true ;
    }
     if(!(obj instanceof Student)){
       return false ;
    }
    Student stu = (Student) obj ;
     if(stu.name.equals( this.name)&&stu.age== this.age){
       return true ;
    } else{
       return false ;
    }
  }
    
   public String toString(){
     return name + "\t\t" + this.age    ;
  }


}
import java.util.Comparator;


class StudentComparator implements Comparator<Student> {

  @Override
   public int compare(Student s1,Student s2) {
     if(s1.equals(s2)){
       return 0 ;
    } else if(s1.getAge()<s2.getAge()){   // 按年龄比较
       return 1 ;
    } else{
       return -1 ;
    }
  }

}

public class ComparatorDemo {

   /**
    * 如果一个类已经开发完成,但是在此类建立初期并没有实现Comparable接口,此时肯定无法进行对象排序操作的, 为了解决这一问题
    * Java有定义了Comparator比较器
    *    
    */

   public static void main(String[] args) {
    Student stu[] = { new Student( "张三", 20), new Student( "李四", 22),
         new Student( "王五", 20), new Student( "赵六", 20),
         new Student( "孙七", 22) };
    java.util.Arrays.sort(stu, new StudentComparator()); // 进行排序操作
     for ( int i = 0; i < stu.length; i++) { // 循环输出数组中的内容
      System.out.println(stu[i]);

    }

  }
}