二叉排序树的实现作业

1、编写SearchBST(T, key)与InsertBST(T, key)的伪代码,并实现;

bintree* SearchBST(bintree* T, int key) {
	/*
	while(T!=NULL){
		if(T的值等于key)return T
		else if(key小于T的值)寻找T的左孩子
		else 寻找T的右孩子
	}
	若找不到,返回NULL
	*/
}
bintree* InsertBST(bintree* T, int key) {
	/*
	if(T!=NULL){
		建立树结点T,值为key
	}
	else if(T的值小于key)插入到右子树
	else 插入到左子树
	返回T
	*/
}
bintree* SearchBST(bintree* T, int key) {
	while (T) {
		if (T->data == key)return T;
		else if (T->data < key) T = T->right;
		else T = T->left;
	}
	return NULL;
}
bintree* InsertBST(bintree* T, int key) {
	if (!T) {
		T = new bintree;
		T->data = key;
		T->left = T->right = NULL;
	}
	else if (T->data < key)T->right = InsertBST(T->right, key);
	else if (T->data > key) T->left = InsertBST(T->left, key);
	return T;
}

2、编写CreateBST(T)的伪代码实现从控制台输入创建BST树。最后使用代码实现。使用“50 30 80 20 40 90 10 25 35 85 23 88”创建BST,并中序输出该BST

bintree* Create(bintree* T) {
	/*
	while(输入){
		InsertBST(T, key)
	}
	*/
}
bintree* Create(bintree* T) {
	/*
	while(){
		当输入-1时退出
		InsertBST(T, key)
	}
	*/
	int n;
	while (1) {
		cin >> n;
		if (n == -1)break;
		T = InsertBST(T, n);
	}
	return T;
}

3、编写DeleteBST(T, key)的伪代码实现从T中删除关键字key。如果无法编写出来,请写出在BST中删除关键字key所需注意的事项。

bintree* Delete(bintree* T, int key) {
	/*
	if(T==NULL)输出not found
	else if (key值小于T值)删除左孩子
	else if (key值大于T值)删除右孩子
	else if(找到结点T且T结点存在左右孩子){
		找到右孩子的最小值代替
	}
	else{
		if(没有左孩子)用右孩子代替
		否则用左孩子代替要删除结点
		删除
	}
	return T
	*/
}

4、选做:使用代码实现DeleteBST(T, key)

bintree* FindMin(bintree* T) {
	if (!T)return NULL;
	else if (!T->left)return T;
	else return FindMin(T->left);
}
bintree* Delete(bintree* T, int key) {
	bintree* tmp;
	if (!T)printf("Not Found\n");
	else if (key < T->data)T->left = Delete(T->left, key);
	else if (key > T->data)T->right = Delete(T->right, key);
	else if (T->left && T->right) {
		tmp = FindMin(T->right);
		T->data = tmp->data;
		T->right = Delete(T->right, T->data);
	}
	else {
		tmp = T;
		if (!T->left)T = T->right;
		else if (!T->right)T = T->left;
		delete tmp;
	}
	return T;
}

posted @ 2020-04-19 21:31  Leesu  阅读(145)  评论(0编辑  收藏  举报