二叉排序树的部分实现

Search(T,key)伪代码

Search(T, key)
{
	if (T为空 || 找到)
	{
		return T;
	}
	 if (key < T - key)
	{
		return Search(左子树查找);
}
	 else
	 {
		 return Search(右子树查找);
	 }

InsertBST(T,key)伪代码

void InsertBST(T, key) {
	if (T为空){
		新生成一个结点;
		}
	else if (T == key)
	{
		return 0;
	}
	else if (T > key)
		InsertBST(T->lchild, key);
	else
		InsertBST(T->rchild, key);
}

Create(T,key)伪代码

void CreateBST(BSTree& T)
{
	int n;
	输入插入个数
	int a[100];
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];//输入插入数据
		InsertBST(T, a[i]);
	}
}

BST的创建

数据类型定义

typedef struct BSTNode
{
	int data;
	struct BSTNode* lchild, * rchild;
}* BSTree;

main函数

int main()
{
	BSTree T = NULL;
	int key;
	CreateBST(T);
	cout << "中序遍历的结果为:" << endl;
	InOrder(T);
	cout << endl;
	return 0;

}

Search(T,key)函数

void InsertBST(BSTree& T, int key)
{
	if (T==NULL)
	{
		T = new BSTNode;
		T->data = key;
		T->lchild = T->rchild = NULL;
	}
	else if (T->data == key)
	{
		return;
	}
	else if (T->data > key)
	{
		InsertBST(T->lchild, key);
	}
	else
	{
		InsertBST(T->rchild, key);
	}
}

InsertBST(BSTree& T, int key)函数

void InsertBST(BSTree& T, int key)
{
	if (T==NULL)
	{
		T = new BSTNode;
		T->data = key;
		T->lchild = T->rchild = NULL;
	}
	else if (T->data == key)
	{
		return;
	}
	else if (T->data > key)
	{
		InsertBST(T->lchild, key);
	}
	else
	{
		InsertBST(T->rchild, key);
	}
}

中序遍历代码

void InOrder(BSTree T)
{

	if (T)
	{
		InOrder(T->lchild);
		cout << T->data << " ";
		InOrder(T->rchild);
	}
}

BST中删除关键字key所需注意的事项

(1)删除叶子节点

直接删除该节点

(2)只有左子树或右子树

用其左子树或者右子树代替它,用其父结点指向其子节点

(3)既有左子树也有右子树

用其前驱或后驱节点替代,并将其前驱节点或后驱节点删掉

Delete(T,key)伪代码

 Delete(T,key)
{
	 if (树空)
	 {
		 return 删除失败;
	}
	else if (找到)
		{
			Delete(T);
			return 1;
		}
		else if (key < T->data)
		{
			return Delete(T->lchild, key);
		}
		else
		{
			return Delete(T->rchild, key);
		}
	}

1、2部分全部代码实现

#include<iostream>
using namespace std;
typedef struct BSTNode
{
	int data;
	struct BSTNode* lchild, * rchild;
}* BSTree;
void InsertBST(BSTree& T, int key)
{
	if (T==NULL)
	{
		T = new BSTNode;
		T->data = key;
		T->lchild = T->rchild = NULL;
	}
	else if (T->data == key)
	{
		return;
	}
	else if (T->data > key)
	{
		InsertBST(T->lchild, key);
	}
	else
	{
		InsertBST(T->rchild, key);
	}
}

void CreateBST(BSTree& T)
{
	int n;
	cout << "请输入要插入的节点数: ";
	cin >> n;
	int a[100];
	cout << "请输入" << endl;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
		InsertBST(T, a[i]);
	}
}

void InOrder(BSTree T)
{

	if (T)
	{
		InOrder(T->lchild);
		cout << T->data << " ";
		InOrder(T->rchild);
	}
}
int main()
{
	BSTree T = NULL;
	int key;
	CreateBST(T);
	cout << "中序遍历的结果为:" << endl;
	InOrder(T);
	cout << endl;
	return 0;

}
posted @ 2020-04-19 18:21  ……,  阅读(212)  评论(0编辑  收藏  举报