定义
二叉排序树,又叫二叉查找树。它是满足以下特殊性质的二叉树。
二叉排序树或者是一颗空树,或者是具有如下性质的二叉树
- 若它的左子树不为空,则左子树上所有节点的值小于根节点的值
- 若它的右子树不为空,则右子树上所有节点的值大于根节点的值
- 它的左子树和右子树分别都是二叉排序树
看过二叉排序树的定义,我们在看如何创建二叉排序树
插入
二叉排序树不允许有重复的值,所以这里我们不讨论有重复的值的情况。首先判断二叉排序树是否为空树,若是空树,直接作为根节点进行插入;若不是空树,新插入的节点必作为一个叶子节点,其插入位置由查找不成功的位置确定。即若小于根节点的值,则递归的在左子树插入,否则递归的在右子树插入
现有一关键字的输入顺序如下:
1,3,2,5,6,创建二叉排序树的过程如下
public static TreeNode insert(TreeNode node,int value){
if(node==null){
node=new TreeNode();
node.value=value;
node.leftChild=null;
node.rightChild=null;
}else if(value<node.value){
node.leftChild=insert(node.leftChild, value);
}else if(value>node.value){
node.rightChild=insert(node.rightChild, value);
}
return node;
}
二叉排序树的创建就是多次调用插入函数
public static TreeNode create(){
System.out.println("请输入节点值:");
TreeNode node=null;
@SuppressWarnings("resource")
Scanner input=new Scanner(System.in);
int value=input.nextInt();
while(value!=-1){
node=insert(node, value);
value=input.nextInt();
}
return node;
}
查找
根据二叉排序树的定义,我们可以递归的进行查找。具体思想:如果二叉树为空,则直接返回空;否则,二叉树的根节点的值等于待查找的值,返回根节点;否则若果待查找的值小于二叉树的根节点,则在其左子树上递归查找;若待查找的值大于二叉树的根节点,则在其右子树上递归查找。
public static TreeNode search(TreeNode node,int value){
if(node==null){
return null;
}else if(node.value==value){
return node;
}else if(value<node.value){
return search(node.leftChild, value);
}else{
return search(node.rightChild, value);
}
}
总结
- 二叉排序树不允许有重复值
- 二叉排序树的中序遍历是一个递增序列