二叉排序树的定义:
二叉排序树(Binary Sort Tree)或者是一颗空树,或者是具有下列性质的二叉树:
1):若左子树不为空,则左子树上所有节点的值均小于根节点的值;若右子树不为空,则右子树上所有节点的值均大于根节点的值。
2):左右子树也都是二叉排序树。
一颗完整的二叉排序树
对二叉排序树进行中序遍历得到从小到大的序列
63,90,70,55,67,42,98,83,10,45,58构造二叉排序树的图解过程
二叉排序树的java实现代码:
public class BinSortTree {
private BinSortTree lChild;// 左孩子
private BinSortTree rChild;// 右孩子
private BinSortTree parent;// 父节点
private Integer data;// 数据域
public BinSortTree(BinSortTree lChild, BinSortTree rChild, Integer data) {
super();
this.lChild = lChild;
this.rChild = rChild;
this.data = data;
}
public BinSortTree(Integer data) {
this(null, null, data);
}
public BinSortTree() {
super();
}
// 插入数据
public boolean insert(BinSortTree tree, Integer item) {
if (item < tree.data) {// 左边插入
if (tree.lChild == null) {
BinSortTree temp = new BinSortTree(item);
tree.lChild = temp;
temp.parent = tree;
return true;
} else {
insert(tree.lChild, item);
}
} else if (item > tree.data) {// 右边插入
if (tree.rChild == null) {
BinSortTree temp = new BinSortTree(item);
tree.rChild = temp;
temp.parent = tree;
return true;
} else {
insert(tree.rChild, item);
}
}
return false;
}
// 中序遍历 (对于二叉排序树 相当于从小到大输出)
public void inorder(BinSortTree tree) {
if (tree != null) {
inorder(tree.lChild);
visit(tree.data);
inorder(tree.rChild);
}
}
private void visit(Integer data) {
System.out.print(data + " ");
}
}
测试代码:
public static void main(String[] args) {
int[] arr={63,90,70,55,67,42,98,83,10,45,58};
BinSortTree tree=new BinSortTree(arr[0]);//将第一个数字作为根节点
for (int i : arr) {
tree.insert(tree, i);
}
tree.inorder(tree);
}
运行结果: