伪代码:
BTree SearchBST(BTree T, int key) {
if (T为空或者T->data == key)
返回T;
if(key<T->data)
返回 SearchBST(T->左子树, key);
else
返回 SearchBST(T->右子树, key);
}
代码:
BTree SearchBST(BTree T, int key)
{
if (T == NULL || T->data == key)
return T;
if (key < T->data)
return SearchBST(T->lchild, key);
else
return SearchBST(T->rchild, key);
}
伪代码:
int InsertBST(BTree& T, int key) {
if (T为空)
{
初始化T并为T申请一个空间;
T->data = key;
T->左右孩子置为空;
返回1;
}
else if (T->data == key)
返回0;
else if (T->data > key)
返回 InsertBST(T->左子树, key);
else
返回 InsertBST(T->右子树, key);
}
代码:
int InsertBST(BTree& T, int key)
{
if (T == NULL)
{
T = new BTNode;
T->data = key;
T->lchild = T->rchild = NULL;
return 1;
}
else if (T->data == key)
return 0;
else if (T->data > key)
return InsertBST(T->lchild, key);
else
return InsertBST(T->rchild, key);
}
CreateBST(T)的伪代码及代码实现
伪代码:
伪代码
void CreateBST(BTree& t, int n)
{
初始化t = NULL;
while (n--)
{
输入x;
InsertBST(t, x);
}
}
代码:
BTree CreateBST(int n)
{
int i = 0;
int x;
BTree t = NULL;
while (n--)
{
cin >> x;
InsertBST(t, x);
}
return t;
}
代码运行截图展示
int DeleteBST(BTNode*& T, int k)的伪代码
int DeleteBST(BTNode*& T, int k)
{
if (T为空)
返回0;
else
{
if (k < T->data)
返回 DeleteBST(T->左子树, k);
else if (k > T->data)
返回 DeleteBST(T->右子树, k);
else {
释放T;
返回1;
}
}
}
void Delete(BTNode*& p)的伪代码
void Delete(BTNode*& p)
{
初始化一个节点q;
if (p的右子树为空)
{
q 暂存p节点;
p 指向它的左子树;
释放q;
}
else if (p的左子树为空)
{
q 暂存p节点;
p 指向它的右子树;
释放q;
}
Delete1(p, p的左子树);
}
void Delete1(BTNode* p, BTNode*& r)的伪代码
void Delete1(BTNode* p, BTNode*& r)
{
初始化一个节点q;
if (r的右子树不为空)
Delete1(p, r指向右子树);
else
{
p->data = r->data;
q = r;
r 指向它的左子树;
释放q;
}
}
int DeleteBST(BTNode*& T, int k)
{
if (T == NULL)
return 0;
else
{
if (k < T->data)
return DeleteBST(T->lchild, k);
else if (k > T->data)
return DeleteBST(T->rchild, k);
else
{
Delete(T);
return 1;
}
}
}
void Delete(BTNode*& p)
{
BTNode* q;
if (p->rchild == NULL)
{
q = p;
p = p->lchild;
free(q);
}
else if (p->lchild == NULL)
{
q = p;
p = p->rchild;
free(q);
}
Delete1(p,p->lchild);
}
void Delete1(BTNode* p, BTNode*& r)
{
BTNode* q;
if (r->rchild != NULL)
Delete1(p, r->rchild);
else
{
p->data = r->data;
q = r;
r = r->lchild;
free(q);
}
}
完整代码
#include<iostream>
using namespace std;
typedef struct BTnode
{
int data;
struct BTnode* lchild;
struct BTnode* rchild;
}BTNode, * BTree;
BTree SearchBST(BTree T, int key);
int InsertBST(BTree& T, int key);
void CreateBST(BTree& t, int n);
void InorderPrintNodes(BTree T);
int DeleteBST(BTNode*& T, int k);
void Delete(BTNode*& T);
void Delete1(BTNode* p, BTNode*& r);
int main()
{
int n;
cin >> n;
BTree T;
CreateBST(T, n);
cout << "中序输出: ";
InorderPrintNodes(T);
cout << endl << "要删除的的节点";
int k;
cin >> k;
DeleteBST(T, k);
cout << "中序输出删除后的节点: ";
InorderPrintNodes(T);
return 0;
}
BTree SearchBST(BTree T, int key)
{
if (T == NULL || T->data == key)
return T;
if (key < T->data)
return SearchBST(T->lchild, key);
else
return SearchBST(T->rchild, key);
}
int InsertBST(BTree& T, int key)
{
if (T == NULL)
{
T = new BTNode;
T->data = key;
T->lchild = T->rchild = NULL;
return 1;
}
else if (T->data == key)
return 0;
else if (T->data > key)
return InsertBST(T->lchild, key);
else
return InsertBST(T->rchild, key);
}
void CreateBST(BTree& t, int n)
{
int i = 0;
int x;
t = NULL;
while (n--)
{
cin >> x;
InsertBST(t, x);
}
};
//中序输出
void InorderPrintNodes(BTree T)
{
if (T)
{
InorderPrintNodes(T->lchild);
cout << T->data << " ";
InorderPrintNodes(T->rchild);
}
}
int DeleteBST(BTNode*& T, int k)
{
if (T == NULL)
return 0;
else
{
if (k < T->data)
return DeleteBST(T->lchild, k);
else if (k > T->data)
return DeleteBST(T->rchild, k);
else
{
Delete(T);
return 1;
}
}
}
void Delete(BTNode*& p)
{
BTNode* q;
if (p->rchild == NULL)
{
q = p;
p = p->lchild;
free(q);
}
else if (p->lchild == NULL)
{
q = p;
p = p->rchild;
free(q);
}
Delete1(p,p->lchild);
}
void Delete1(BTNode* p, BTNode*& r)
{
BTNode* q;
if (r->rchild != NULL)
Delete1(p, r->rchild);
else
{
p->data = r->data;
q = r;
r = r->lchild;
free(q);
}
}
案例
原文:https://www.cnblogs.com/ssp1781554770/p/12733754.html