二叉排序树的实现
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大节点(代码片段