用于实现二叉查找树的节点对象
package custom.tree;
/**
* 用于实现二叉树结构的节点
*/
public class TreeNode<E> {
//左叶子节点
private TreeNode<E> left;
//右叶子节点
private TreeNode<E> right;
//节点上的数据
private E data;
public TreeNode() {
super();
}
public TreeNode(TreeNode<E> left, TreeNode<E> right, E data) {
super();
this.left = left;
this.right = right;
this.data = data;
}
public TreeNode<E> getLeft() {
return left;
}
public void setLeft(TreeNode<E> left) {
this.left = left;
}
public TreeNode<E> getRight() {
return right;
}
public void setRight(TreeNode<E> right) {
this.right = right;
}
public E getData() {
return data;
}
public void setData(E data) {
this.data = data;
}
}
二叉树的具体实现代码:
package custom.tree;
import java.util.Comparator;
//二叉查找树
public class BinaryTree<E> {
// 根节点
private TreeNode<E> root;
// 比较器,用来比较存放的数据
private Comparator<? super E> comparator;
public BinaryTree() {
}
// 传入比较器
public BinaryTree(Comparator<? super E> comparator) {
this.comparator = comparator;
}
//获取根节点
public TreeNode<E> getRoot() {
return root;
}
//获取最右边的节点
public TreeNode<E> getMaxNode(){
TreeNode<E> p = root;
if(p.getRight() != null){
p = p.getRight();
}
return p;
}
/**
* 用来比较节点中的数据的大小,模仿TreeMap的源码
* 若 e1 > e2 ,返回正数
*/
public int compare(E e1, E e2) {
return comparator == null ? ((Comparable<? super E>) e1).compareTo((E) e2) : comparator.compare((E) e1, (E) e2);
}
/**
* 添加数据同时对数据进行排序
* 建立二叉树结构
*/
public void add(E data) {
TreeNode<E> node = new TreeNode<E>();
node.setData(data);
if (root == null) {
root = node;
} else {
TreeNode<E> tar = root;
while (true) {
int r = compare(data,tar.getData());
if(r > 0){
TreeNode<E> right = tar.getRight();
if(right == null){
tar.setRight(node);
break;
}else{
tar = right;
}
}else if(r < 0){
TreeNode<E> left = tar.getLeft();
if(left == null){
tar.setLeft(node);
break;
}else{
tar = left;
}
}else{
break;
}
}
}
}
/**
* 使用递归遍历查找节点
* 从左到右输出节点上的数据
*/
public void foreachNode(TreeNode<E> treeNode){
if(treeNode.getLeft() != null)
foreachNode(treeNode.getLeft());
System.out.println(treeNode.getData());
if(treeNode.getRight() != null)
foreachNode(treeNode.getRight());
}
}