非递归实现BST树的删除操作:
1. 先搜索BST树,找到待删除的节点
2. 判断删除节点是否有两个孩子,如果有,用前驱的值代替,直接删除前驱
3. 删除有一个孩子的节点,或者没有孩子的节点(看作有一个孩子,孩子是null)
/**
* 非递归实现BST树的删除操作
* @param data
*/
public void non_remove(T data){
if(this.root == null){
return;
}
// 1. 先搜索BST树,找到待删除的节点
BSTNode<T> cur = this.root;
BSTNode<T> parent = null;
while(cur != null){
if(cur.getData().compareTo(data) > 0){
parent = cur;
cur = cur.getLeft();
} else if(cur.getData().compareTo(data) < 0){
parent = cur;
cur = cur.getRight();
} else {
break;
}
}
if(cur == null){ // 表示BST树中没有值为data的节点
return;
}
// 2. 判断删除节点是否有两个孩子,如果有,用前驱的值代替,直接删除前驱
if(cur.getLeft() != null && cur.getRight() !