【1】编写SearchBST(T, key)与InsertBST(T, key)的伪代码,并实现
BTree Search(BTree bt, keytype k) { /*伪代码 if(bt=NULL或bt->key=k) return bt; if(k>bt->key) return Search(bt->rchild,k) else return Search(bt->lchild,k) */ if (bt == NULL || bt->key == k) return bt; if (k > bt->key) return Search(bt->rchild, k); else return Search(bt->lchild, k); }
int Insert(BTree &bt, keytype k) { /*伪代码 if(bt=NULL) { 建立新节点bt; bt->key=k; bt左右孩子都为空; } if(bt->key=k) 不需要插入,return 0; if(k>bt->key) return Insert(bt->rchild,k); if(k<bt->key) return Insert(bt->lchild,k); */ if (bt == NULL) { bt = new BTNode; bt->key = k; bt->rchild = NULL; bt->lchild = NULL; return 1; } else if (k == bt->key) return 0; else if (k > bt->key) return Insert(bt->rchild, k); else return Insert(bt->lchild, k); }
【2】编写CreateBST(T)的伪代码实现从控制台输入创建BST树。最后使用代码实现。使用“50 30 80 20 40 90 10 25 35 85 23 88”创建BST,并中序输出该BST
BTree Creat(int n) { /* 创建头指针,设为空; 用循环依次输入、插入节点; return 根节点; */ BTree bt = NULL; int i, x; for (i = 0; i < n; i++) { cin >> x; Insert(bt, x); } return bt; }
【3】编写DeleteBST(T, key)的伪代码实现从T中删除关键字key。如果无法编写出来,请写出在BST中删除关键字key所需注意的事项
int Delete1(BTree &bt,keytype k) { /*伪代码 if(bt为空) return 0; else if(k>bt->key) return Delete1(bt->rchild,k); else if(k<bt->key) return Delete1(bt->lchild,k); else { Delete2(bt); return 1; } */ if (bt == NULL) return 0; if (k > bt->key) return Delete1(bt->rchild, k); if (k < bt->key) return Delete1(bt->lchild, k); if (k == bt->key) { Delete2(bt); return 1; } } void Delete2(BTree& bt) { /*伪代码 if(bt->rchild和bt->lchild都为空) free(bt); if(bt->rchild为空) { 将它父亲的左孩子指向它的左孩子; free(bt); } if(bt->lchild为空) { 将它父亲的右孩子指向它的右孩子; free(bt); } */ BTree p; if (bt->rchild == NULL && bt->lchild == NULL) free(bt); if (bt->rchild == NULL) { p = bt; bt = bt->lchild; free(p); } if (bt->lchild == NULL) { p = bt; bt = bt->rchild; free(p); } if (bt->lchild != NULL && bt->rchild != NULL) Delete3(bt, bt->lchild); } void Delete3(BTree& bt,BTree& t) { /*伪代码 if(t->rchild不为空) Delete3(bt,t->rchild); else { 将t->key赋给bt; free(bt); } */ BTree p; if (t->rchild != NULL) Delete3(bt, t->rchild); else { bt->key = t->key; p = t; t = t->lchild; free(p); } }
【4】选做:使用代码实现DeleteBST(T, key)
删除了key为20的数。
原文:https://www.cnblogs.com/huangdong521/p/12731951.html