二叉排序树的实现

Posted f-x-v-a-l-k

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉排序树的实现相关的知识,希望对你有一定的参考价值。

 

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

SearchBST(T, key)伪代码

技术图片

 

 InsertBST(T, key)的伪代码:

技术图片

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

CreateBST(T)的伪代码:

技术图片

 

 

CreateBST(T)的代码:

 技术图片

 完整代码

 1 #include<iostream>
 2 using namespace std;
 3 typedef struct BSTNode
 4 {
 5     int data;
 6     int key;
 7     struct BSTNode* lchild, * rchild;
 8 }BSTNode;
 9 int InsertBST(BSTNode*& T, int key){
10     if (T == NULL){     //若T为空,则创建一个关键字为key的结点作为根结点
11         T = new BSTNode;
12         T->key = key;
13         T->lchild = T->rchild = NULL;
14         return true;
15     }
16     else if (T->key==key)
17         return 0;
18     else if (T->key>key)
19         return InsertBST(T->lchild, key);
20     else
21         return InsertBST(T->rchild, key);
22 }
23 BSTNode* CreateBST(int a[], int n)
24 {
25     int i = 0;
26     BSTNode* T = NULL;
27     while (i < n)
28     {
29         InsertBST(T, a[i]);
30         i++;
31     }
32     return  T;
33 }
34 
35 void InOrder(BSTNode* T)
36 {
37     if (T == NULL)return;
38     else{
39         InOrder(T->lchild);
40         cout << T->key<< " "<<endl;
41         InOrder(T->rchild);
42     }
43 }
44 int main()
45 {
46    BSTNode*T;
47     int i = 0,key=0;
48     int a[100] = { 0 };
49     cout << "输入结点个数:" << endl;
50     int len;
51     cin >> len;
52     cout << "输入结点:" << endl;
53     while (i < len)
54     {
55         cin >> a[i];
56         i++;
57     }
58     cout << "中序遍历的结果为:" << endl;
59     T = CreateBST(a, len);
60     InOrder(T);
61     InsertBST(T, key);
62     return 0;
63 }

 

 技术图片

 

 

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

DeleteBST(T, key)的伪代码

1 if(树T为空)返回0
2     else {
3         if(k<bt->data)return DeleteBST(T->lchild,key)
4         else if(key>bt->data)return DeleteBST(T->rchild,key)
5         else {
6            函数Delete(T)来删除关键字为k的节点
7    
8         }
9     }

 

注意事项及要点:

删除关键字key首先要判断key所在结点的位置:叶子结点,只有左或只有右子树结点,左右子树都有的结点

 

 

 

 

 

 

 

 

 

------------恢复内容开始------------

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

SearchBST(T, key)伪代码

技术图片

 

 InsertBST(T, key)的伪代码:

技术图片

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

CreateBST(T)的伪代码:

技术图片

 

 

 

 

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

 

 

 

 

 

 

 

------------恢复内容结束------------

------------恢复内容开始------------

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

SearchBST(T, key)伪代码

技术图片

 

 InsertBST(T, key)的伪代码:

技术图片

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

CreateBST(T)的伪代码:

技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CreateBST(T)的代码:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

------------恢复内容开始------------

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

SearchBST(T, key)伪代码

技术图片

 

 InsertBST(T, key)的伪代码:

技术图片

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

CreateBST(T)的伪代码:

技术图片

 

 

 

 

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

 

 

 

 

 

 

 

------------恢复内容结束------------

------------恢复内容结束------------

------------恢复内容结束------------

------------恢复内容结束------------

------------恢复内容结束------------

------------恢复内容结束------------

------------恢复内容结束------------

以上是关于二叉排序树的实现的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

二叉排序树的实现

二叉排序树的实现

排序:Java实现大顶堆和二叉树的广度优先遍历原理及代码注释详解

二叉排序树的实现(部分功能

二叉排序树的实现