使用JAVA实现二叉排序树
(1)二叉排序树定义
亦称二叉搜索树,是数据结构中的一类。在一般情况下,查询效率比链表结构要高。
二叉排序树的特点如下:
1,若左子树不为空,则左子树上所有节点的值均小于它的根节点的值。
2,若右子树不为空,则右子树上所有节点的值均大于它的根结点的值。
3,左、右子树也分别为二叉排序树。
4,没有键值相等的节点。
下图为一个二叉排序树:
(2)实现代码
以下代码只实现了二叉排序树的添加节点和中序遍历节点的方法。
BinarySortTree.java
public class BinarySortTree {
private Node root; //根节点
//添加节点方法
public void add(int v){
if(root==null){
root=new Node(v); //根节点为空,直接创建节点
}else{
root.addChild(v);//根节点不为空,进行孩子节点添加
}
}
//中序遍历
public void middleList(){
root.printNode();
}
//利用内部类定义节点类
static class Node{
//节点的值
private int item;
//左孩子
private Node left;
//右孩子
private Node right;
public Node(int v){
this.item=v;
}
//二叉查找树的添加节点的方法
public void addChild(int v){
if(this.item>v){
if(this.left==null){
this.left=new Node(v);
System.out.println(v+"放在了"+this.item+"的左边");
}else{
this.left.addChild(v); //递归
}
}else if(this.item<v){
if(this.right==null){
this.right=new Node(v);
System.out.println(v+"放在了"+this.item+"的右边");
}else{
this.right.addChild(v);//递归
}
}else{
System.out.println(v+"这个元素已经存在,不能重复添加!");
}
}
//中序遍历查找二叉树节点
public void printNode(){
//查找左子树
if(this.left!=null){
this.left.printNode();//递归寻找最左边的节点
}
//查找根节点
System.out.println(this.item); //打印根节点信息
// 查找右子树
if(this.right!=null){
this.right.printNode();//递归寻找右子树
}
}
}
}
TestBinarySortTree.java
public class TestBinarySortTree {
public static void main(String[] args) {
BinarySortTree binarySortTree=new BinarySortTree();
//添加节点
binarySortTree.add(10);
binarySortTree.add(5);
binarySortTree.add(20);
binarySortTree.add(3);
binarySortTree.add(8);
binarySortTree.add(15);
binarySortTree.add(26);
//遍历
binarySortTree.middleList();
}
}