一、BST树的查询操作的实现
/*
BST树中查询操作的实现
*/
public BSTNode<T> query(T data){
BSTNode<T> cur = root;
while (cur != null){
if (cur != null){
if (cur.getData().compareTo(data)>0){
//根节点的值大于所查询数据时,往左孩子继续遍历查询
cur = cur.getLeft();
} else if (cur.getData().compareTo(data)<0){
//根节点的值小于所查询数据时,往左孩子继续遍历查询
cur = cur.getRight();
} else {
return cur; //此时,根节点的值即为所要查询的值
}
}
return null;
}
}
前序遍历:先输出父节点,再遍历左子树和右子树
中序遍历:先遍历左子树,再输出父节点,再遍历右子树
后序遍历:先遍历左子树,再遍历右子树,最后输出父节点
小结:看输出父节点的顺序,再确定是前序,中序,还是后序
二、BST树的前、中、后序遍历的实现
/*
前序遍历
*/
public void preOrder(){
preOrder(root);
System.out.print(root.getData() +" ");
preOrder(root.getLeft());
preOrder(root.getRight());
}
private void preOrder(BSTNode<T> root){
if (root != null) {
System.out.print(root.getData()+" ");
preOrder(root.getLeft());
preOrder(root.getRight());
}
}
/*
BST树的中序遍历
*/
public void inOrder(){
inOrder(root);
System.out.println();
}
private void inOrder(BSTNode<T> root ){
if (root!= null){
inOrder(root.getLeft());
System.out.print(root.getData()+" ");
inOrder(root.getRight());
}
}
/*
BST树的后序遍历
*/
public void lastOrderOrder(){
inOrder(root);
System.out.println();
}
private void lastOrder(BSTNode<T> root ){
if (root!= null){
inOrder(root.getLeft());
System.out.print(root.getData()+" ");
inOrder(root.getRight());
}
}