二叉排序树的实现

1.SearchBST(T, key)与InsertBST(T, key)

SearchBST(T, key)

伪代码:

void SearchBST(BSTNode*& T, int key)
{
	if (T为空 || T与key相等)
		返回T
	if (key<=T)
		SearchBST(T->lchild, key)
	if (key>T)
		SearchBST(T->rchild, key)
}

代码:

void SearchBST(BSTNode* &T, int key) 
{
	if (T == NULL || key == T->data)
		return;
	if (key <= T->data)
		SearchBST(T->lchild, key);
	else if (key > T->data)
		SearchBST(T->rchild, key);
}

InsertBST(T, key)

伪代码:

void InsertBST(BSTNode*& T, int key)
{
    if(T为空){
	   初始化T
	   T->data = key
	   返回T
	}
	else{
	    if(key<=T)
	       InsertBST(T->lchild,key)
	    if(key>T)
	       InsertBST(T->rchild,key)
}

代码:

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

2.编写CreateBST(T)并使用“50 30 80 20 40 90 10 25 35 85 23 88”创建BST,中序输出

伪代码:

BSTNode* CreateBST(BSTNode*& T)
{
	int n,a[MAX]
	输入个数n
	for (int i = 0; i < n; i++) 
	{
		数据输入数组
		调用InsertBST函数
	}
	中序遍历Inorder(T)
	返回T
}

代码:

BSTNode* CreateBST(BSTNode*& T)
{
	int n,a[MAX];
	cin >> n;
	for (int i = 0; i < n; i++) 
	{
		cin >> a[i];
		InsertBST(T, a[i]);
	}
	Inorder(T);
	return T;
}

实现效果:

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

  1. 当所删除的节点为叶子节点时,直接删除即可
  2. 当仅有左或右子树的节点时,只需要上移其子树
  3. 当节点为左右子树都有的节点,删除节点的直接前驱或者直接后继来替换当前节点,调整直接前驱或者直接后继的位置
posted @ 2020-04-19 20:25  阿尔法个贝塔  阅读(146)  评论(0编辑  收藏  举报