1.定义节点类
package com.lyf.binarytree; public class Node<T extends Comparable<T>> { private Node<T> left; private T value; private Node<T> right; public Node() { super(); } public Node(T value) { super(); this.value = value; } public Node<T> getLeft() { return left; } public void setLeft(Node<T> left) { this.left = left; } public T getValue() { return value; } public void setValue(T value) { this.value = value; } public Node<T> getRight() { return right; } public void setRight(Node<T> right) { this.right = right; } @Override public String toString() { return "Node [value=" + value + "]"; } }2.定义二叉树:
package com.lyf.binarytree; import java.util.ArrayList; import java.util.List; public class BinaryTree<T extends Comparable<T>> { private Node<T> root; public BinaryTree() { super(); } public BinaryTree(T value) { super(); this.root = new Node<T>(value); } public Node<T> getRoot() { return root; } public void setRoot(Node<T> root) { this.root = root; } public T add(T value) { if(null==root) { root = new Node<T>(value); return value; }else { Node<T> current = root; while(true) { if(current.getValue().compareTo(value)>0) { //小于临时节点 if(null!=current.getLeft()) { current = current.getLeft(); }else { Node<T> node = new Node<T>(value); current.setLeft(node); return value; } }else if(current.getValue().compareTo(value)<0) { //大于临时节点 if(null!=current.getRight()) { current = current.getRight(); }else { Node<T> node = new Node<T>(value); current.setRight(node); return value; } }else { //等于临时节点 return null; } } } } public Node<T> get(T value){ if(null==root) { return null; }else { Node<T> current = root; while(true) { if(current.getValue().compareTo(value)>0) { //小于临时节点 if(null!=current.getLeft()) { current = current.getLeft(); }else { return null; } }else if(current.getValue().compareTo(value)<0) { //大于临时节点 if(null!=current.getRight()) { current = current.getRight(); }else { return null; } }else { //等于临时节点 return current; } } } } public void forEach(Node<T> node) { if(null!=node) { if(null!=node.getLeft()) { forEach(node); } System.out.println(node.getValue()); if(null!=node.getRight()) { forEach(node); } } } public void forEach2(Node<T> node,List<T> list) { if(null!=node) { if(null!=node.getLeft()) { forEach2(node.getLeft(),list); } list.add(node.getValue()); if(null!=node.getRight()) { forEach2(node.getRight(),list); } } } @Override public String toString() { List<T> list = new ArrayList<T>(); forEach2(root,list); return list.toString(); } }3.实体类:
package com.lyf.binarytree; public class Student implements Comparable<Student> { private int age; private String name; public Student(int age, String name) { super(); this.age = age; this.name = name; } public Student() { super(); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Student o) { if(this.getAge()>o.getAge()) { return 1; } if(this.getAge()<o.getAge()) { return -1; } return this.getName().compareTo(o.getName()); } @Override public String toString() { return "Student [age=" + age + ", name=" + name + "]"; } }4.测试类:
package com.lyf.binarytree; public class Test { public static void main(String[] args) { BinaryTree<Student> node = new BinaryTree<Student>(); Random random = new Random(); for(int i=0;i<10;i++) { Student student = new Student(random.nextInt(10), ""+random.nextInt(10)+i); node.add(student); } System.out.println(node.toString()); } }