-----------------结点定义------------------
package Tree;
/*
二叉树节点定义
*/
public class TreeNode {
int data;
TreeNode lchild;
TreeNode rchild;
public TreeNode(int data) {
this.data = data;
}
public TreeNode() {
}
@Override
public String toString() {
return "TreeNode{" +
"data=" + data +
'}';
}
}
----------操作实现--------
package Tree;
/*
二叉查找树
*/
public class BinarySearchTree {
TreeNode root;
//构造二叉查找树
public TreeNode insertNode( TreeNode node,int data) {
if(node == null) return new TreeNode(data);//找到插入位置--构造节点插入
else if(node.data>data) {
node.lchild = insertNode(node.lchild,data);
}else if(node.data<data) {
node.rchild = insertNode(node.rchild,data);
}else{
node.data = data;
}
return node;
}
//提供插入接口
public void insert (int data) {
root = insertNode(root,data);
}
//前序遍历
public void preOrder(TreeNode root) {
TreeNode p = root;
if(p==null) {
return;
}
System.out.println(p);
preOrder(p.lchild);
preOrder(p.rchild);
}
//中序遍历
public void midOrder(TreeNode node) {
if(node==null) return;
midOrder(node.lchild);
System.out.println(node);
midOrder(node.rchild);
}
//后序遍历
public void postOrder(TreeNode node) {
if(node==null) return;
postOrder(node.lchild);
postOrder(node.rchild);
System.out.println(node);
}
//层次遍历
public void levelOrder(TreeNode root) {
//准备循环队列
TreeNode[] queue = new TreeNode[10];//数组大小取决于树的大小
int front = 0;
int rear = 0;
int x = queue.length;
//根节点入队
queue[rear] = root;
rear = (rear+1)%x;
while(rear!=front) {
//根结点出队
TreeNode p = queue[front];
front = (front+1)%x;
System.out.println(p);//打印结点
if(p.lchild!=null) {
queue[rear] = p.lchild;//左孩子入队
rear = (rear+1)%x;
}
if(p.rchild!=null) {
queue[rear] = p.rchild;//右孩子入队
rear = (rear+1)%x;
}
}
}
//测试
public static void main(String[] args) {
BinarySearchTree bst = new BinarySearchTree();
bst.insert(1);
bst.insert(0);
bst.insert(9);
bst.insert(10);
bst.insert(52);
bst.insert(100);
bst.insert(256);
bst.insert(33);
bst.insert(64);
bst.preOrder(bst.root);
System.out.println("------------------");
bst.midOrder(bst.root);
System.out.println("------------------");
bst.postOrder(bst.root);
System.out.println("------------------");
bst.levelOrder(bst.root);
}
}