/**
* @Title: BinaryTree.java
* @Description: 二叉排序树的实现
* @author glorychou
* @date 2017年2月25日 下午10:22:03
*/
package per.zyf.bds;
/**
* @author glorychou
*
*/
public class BinaryTree<E extends Comparable<E>> {
// 根节点
private Node<E> root;
// 树大小
private int size;
/**
* @Description: 在树中插入元素
* @param e 节点数据
* @return boolean 处理情况
*/
public boolean add(E e) {
// 创建新节点
final Node<E> newNode = new Node<>(null, e, null);
// 按照二叉排序方式插入
if (root != null) {
Node<E> parentNode = null;
Node<E> compareNode = root;
while(compareNode != null) {
// 新节点大于比较节点则插入右子树中
if(e.compareTo(compareNode.item) > 0) {
parentNode = compareNode;
compareNode = compareNode.rightChild;
if(compareNode == null)
parentNode.rightChild = newNode;
} else {// 新节点小于或等于比较节点则插入左子树中
parentNode = compareNode;
compareNode = compareNode.leftChild;
if(compareNode == null)
parentNode.rightChild = newNode;
}
}
} else
root = newNode;
size++;
return true;
}
/**
* @Description: 中序遍历输出
* @return void 返回类型
*/
public void inorderPrint(Node<E> e) {
if(e == null) return;
inorderPrint(e.leftChild);
System.out.print(e.item.toString() + " ");
inorderPrint(e.rightChild);
}
/**
* @Description: 判断树是否为空
* @return boolean 是否为空
*/
public boolean isEmpty() {
return size > 0 ? false : true;
}
/**
* @Description: 获取树的节点数
* @return int 树节点数
*/
public int size() {
return size;
}
// 树节点
private static class Node<E> {
E item;
Node<E> leftChild;
Node<E> rightChild;
Node(Node<E> l, E e, Node<E> r) {
leftChild = l;
item = e;
rightChild = r;
}
}
}