二叉搜索树
又称BST树、二叉排序树。二叉搜索树或者是一颗空树,或者是具有下列性质的二叉树:
- 1、每一个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。
- 2、左子树(如果存在)上所有节点的关键码都小于根节点的关键码。
- 3、右子树(如果存在)上所有节点的关键码都大于根节点的关键码。
- 4、左子树和右子树也是二叉搜索树
总结:如果对一颗二叉搜索树进行中序遍历,可以按从小到大的顺序,将各个关键码排列起来,所以也称二叉搜索树为二叉排序树。
结构设计:
class BSTNode{
private BSTNode leftChild;
private BSTNode parent;
private BSTNode rightChild;
private int data;
public BSTNode(){
leftChild = null;
parent = null;
rightChild = null;
data = 0;
}
public BSTNode(int data){
leftChild = null;
parent = null;
rightChild = null;
this.data = data;
}
public BSTNode(int data,BSTNode parent){
leftChild = null;
this.parent = parent;
rightChild = null;
this.data = data;
}
public BSTNode(int data,BSTNode parent,BSTNode leftChild,BSTNode rightChild){
this.leftChild = leftChild;
this.parent = parent;
this.rightChild = rightChild;
this.data = data;
}
}
private BSTNode head; //指向根节点
private int curSize; //记录有效个数
public BSTTree(){
curSize = 0;
head = new BSTNode();
}
BST树的相关操作
1、非递归查询
/**
* 非递归形式寻找元素
* @param value
* @return
*/
public BSTNode FindValue(int value){
BSTNode node = head.parent; //root
while (node != null && node.data != value){
node = value < node.data ? node.leftChild : node.rightChild;
}
return node;
}
2、递归查询
在二叉搜索树上进行搜索,是一个从根节点开始,沿某一个分支逐层向下进行比较判等的过程。它可以是一个递归的过程。
假设想要在二叉搜索树中搜索关键码为value的元素,搜索过程从根节点开始。如果根指针为null,则搜索失败;否则用给定值value与根节点的关键码进行比较ÿ