• 二叉排序树的实现


    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所需注意的事项。

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

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

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

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

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

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

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

  • 相关阅读:
    【UVA–11997 K Smallest Sums 】
    【LA 3027 Corporative Network】
    【bzoj3173-最长上升子序列-一题两解】
    【Rain in ACStar HDU-3340】
    【Uva 11280 飞到弗雷德里顿】
    【Uva 10269 马里奥与公主的归途】
    【Uva 11604 编码都有歧义了】
    【RevolC FaeLoN Uva 10972】
    oracle解析xml(增加对9i版本的支持)
    acl操作记录
  • 原文地址:https://www.cnblogs.com/f-x-v-a-l-k/p/12732398.html
Copyright © 2020-2023  润新知