目录
对于真题的逻辑解析是能理解的,但是自己独立思考出正确的思路还需要很长的练习。
二叉排序树删除
递归删除
void DeleteBST(BiTree &root, KeyType x) {
if (NULL == root) return;
if (root->key > x) {//删除树比结点小,进左子树查找
DeleteBST(root->lchild, x);
} else if (root->key < x) {
DeleteBST(root->rchild, x);
} else {//找到删除的结点
if (root->lchild == NULL) {//左子树为空,右子树顶上去
BiTree tempNode = root;
root = root->rchild;
free(tempNode);
} else if (root->rchild == NULL) {//右子树为空,左子树顶上去
BiTree tempNode = root;
root = root->lchild;
free(tempNode);
} else {//左右子树都不为空
//一般的删除策略是左子树的最大数据(左子树的最右结点) 或 右子树的最小数据(右子树的最小结点)
//代替要删除的结点(这里采用查找左子树最大数据来代替)
Bi