/**
* 二叉搜索树
*/
public class BinaryTree implements ITree<BinaryTree.Node> {
public Node root;
public BinaryTree() {
}
/**
* 插入
*
* @param data
* @return
*/
@Override
public boolean insert(int data) {
if (root == null) {
root = new Node(data);
return true;
}else {
Node newNode = new Node(data);
Node current = root;
Node parentNode;
while (current != null) {
parentNode = current;
if (current.data > data) {
current = current.leftNode;
if (current == null) {
parentNode.leftNode = newNode;
return true;
}
} else {
current = current.rightNode;
if (current == null) {
parentNode.rightNode = newNode;
return true;
}
}
}
}
return false;
}
/**
* 先序遍历
*
* @param node
*/
@Override
public void preOrder(Node node) {
if (node != null) {
System.out.println(node.data);
preOrder(node.leftNode);
preOrder(node.rightNode);
}
}
/**
* 中序遍历
*
* @param node
*/
@Override
public void infixOrder(Node node) {
if (node != null) {
infixOrder(node.leftNode);
System.out.println(node.data);
infixOrder(node.rightNode);
}
}
/**
* 后序遍历
*
* @return
*/
@Override
public void postOrder(Node node) {
if (node != null) {
infixOrder(node.leftNode);
infixOrder(node.rightNode);
System.out.println(node.data);
}
}
/**
* 查找最大值
*
* @return
*/
@Override
public Object findMax() {
Node current = root;
if (current != null && current.rightNode != null) {
current = current.rightNode;
}
return current;
}
/**
* 查找最小值
*
* @return
*/
@Override
public Object findMin() {
Node current = root;
if (current != null && current.leftNode != null) {
current = current.leftNode;
}
return current;
}
/**
* 删除节点
*
* @param data
*/
@Override
public void delete(Node data) {
}
static class Node {
int data;
Node leftNode;
Node rightNode;
public Node(int data) {
this.data = data;
}
}
}