public abstract class BSATree> {
protected BSTNode aRoot; // 根结点
/**
* 节点
*
* @timestamp Mar 5, 2016 2:48:29 PM
* @author smallbug
* @param
*/
protected class BSTNode {
E key; // 关键字(键值)
BSTNode left; // 左孩子
BSTNode right; // 右孩子
BSTNode parent; // 父结点
public BSTNode(E key, BSTNode parent, BSTNode left, BSTNode right) {
this.key = key;
this.parent = parent;
this.left = left;
this.right = right;
}
public BSTNode(E key, BSATree.BSTNode parent) {
super();
this.key = key;
this.parent = parent;
}
}
/**
* 创建二叉树
*
* @timestamp Mar 5, 2016 2:48:37 PM
*/
protected abstract void createBSTree();
/**
* 记录节点
*
* @timestamp Mar 5, 2016 2:49:07 PM
* @param key
*/
private void takeNode(T key) {
System.out.print(key + " ");
}
/**
* 前序遍历
*
* @timestamp Mar 5, 2016 2:48:44 PM
* @param node
*/
private void preOrder(BSTNode node) {
if (node != null) {
takeNode(node.key);
preOrder(node.left);
preOrder(node.right);
}
}
protected void preOrder() {
preOrder(aRoot);
}
/**
* 中序遍历
*
* @timestamp Mar 5, 2016 2:48:52 PM
* @param node
*/
private void inOrder(BSTNode node) {
if (node != null) {
inOrder(node.left);
takeNode(node.key);
inOrder(node.right);
}
}
protected void inOrder() {
inOrder(aRoot);
}
/**
* 后续遍历
*
* @timestamp Mar 5, 2016 2:51:19 PM
* @param node
*/
private void postOrder(BSTNode node) {
if (node != null) {
postOrder(node.left);
postOrder(node.right);
takeNode(node.key);
}
}
protected void postOrder() {
postOrder(aRoot);
}
}
实现:
public class BSTree extends BSATree {
@Override
public void createBSTree() {
aRoot = new BSTNode("A", null);
BSTNode bNode = new BSTNode("B", aRoot);
BSTNode cNode = new BSTNode("C", aRoot);
BSTNode dNode = new BSTNode("D", bNode);
BSTNode eNode = new BSTNode("E", bNode);
BSTNode fNode = new BSTNode("F", cNode);
BSTNode gNode = new BSTNode("G", cNode);
BSTNode hNode = new BSTNode("H", dNode);
BSTNode iNode = new BSTNode("I", dNode);
BSTNode jNode = new BSTNode("J", eNode);
BSTNode kNode = new BSTNode("K", fNode);
aRoot.left = bNode;
aRoot.right = cNode;
bNode.left = dNode;
bNode.right = eNode;
cNode.left = fNode;
cNode.right = gNode;
dNode.left = hNode;
dNode.right = iNode;
eNode.right = jNode;
fNode.right = kNode;
}
public static void main(String[] args) {
BSTree b = new BSTree();
b.createBSTree();
System.out.println("********************** 前序遍历 **********************");
b.preOrder();
System.out.println();
System.out.println("********************** 中序遍历 **********************");
b.inOrder();
System.out.println();
System.out.println("********************** 后序遍历 **********************");
b.postOrder();
System.out.println();
}
}
输出:
********************** 前序遍历 **********************
A B D H I E J C F K G
********************** 中序遍历 **********************
H D I B E J A F K C G
********************** 后序遍历 **********************
H I D J E B K F G C A
前序遍历:
中序遍历:
后序遍历: