1. 编写SearchBST(T, key)与InsertBST(T, key)的伪代码,并实现;
SearchBST(T, key)
伪代码:
if (T为空 || T的值等于key)返回T
if (T的值 > key)返回Search(T->lchid, key)
if (T的值 < key)返回Search(T->rchid, key)
代码:
void Search(BiTree T, char key) {
if (T == NULL || T->data == key)
return T;
if (T->data > key)
return Search(T->lchild, key);
else
return Search(T->rchild, key);
}
InsertBST(T, key)
伪代码:
if (T为空) {
创建新的根节点
新根节点的值为key
}
if (T == key)返回0
if (T的值 > key)返回InsertBST(T->lchild,key)
if (T的值 < key)返回InsertBST(T->rchild,key)
代码:
if (T == NULL) {
T = new BiTNode;
T->data = key;
T->lchild == NULL;
T->rchild == NULL;
return 1;
}
else if (T->data == key)
return 0;
else if (T->data > key)
return InsertBST(T->lchild, key);
else if (T->data < key)
return InsertBST(T->rchild, key);
}
2. 编写CreateBST(T)的伪代码实现从控制台输入创建BST树。最后使用代码实现。使用“50 30 80 20 40 90 10 25 35 85 23 88”创建BST,并中序输出该BST
CreateBST(T)
伪代码:
初始化树T为空树
int i=0;
while (i < n) {
调用函数InsertBST
i++
}
返回T
代码:
BiTNode *CreatBST(int a[], int n) {
BiTNode *T = NULL;
int i = 0;
while (i < n) {
InsertBST(T, a[i]);
i++;
}
return T;
}
中序输出该BST
3. 编写DeleteBST(T, key)的伪代码实现从T中删除关键字key。如果无法编写出来,请写出在BST中删除关键字key所需注意的事项。
DeleteBST(T, key)
伪代码:
if(T为空)返回0
else {
if(k<T->data)返回DeleteBST(T->lchild,key)
else if(k>T->data)返回DeleteBST(T->rchild,key)
else {
调用函数Delete(T)
返回1
}
}
4. 选做:使用代码实现DeleteBST(T, key)
DeleteBST(T, key)
代码:
int DeleteBST(BiTNode *&T, char key) {
if (T == NULL)
return 0;
else {
if (key < T->data)
return DeleteBST(T->lchild, key);
else if (key > T->data)
return DeleteBST(T->rchild, key);
else {
Delete(T);
return 1;
}
}
}