利用二叉排序树可以实现集合的插入,删除和查找操作求怎么把只能输入数值转换成英文单词的查找

如何改动数值为英文单词,求大神指教
#include
#include
using namespace std;
typedef struct TreeNode//声明树的结构
{

int key;//存放关键字
struct TreeNode left;//存放左子树的指针
struct TreeNode *right;//存放右子树的指针
}treeNode;
class BiSortTree
{
public:
BiSortTree(void);
void desplayTree(void);//显示这个树
void insertTree(int key);//在树中插入一个结点
int deleteTree(int key);//在树中删除一个结点
treeNode
searchTree(int key);//在树中查找一个结点
~BiSortTree();
private:
treeNode* buildTree(treeNode* head,int number);//建立一个树
treeNode* search(treeNode* head ,int key);//查找
treeNode* BiSortTree::searchParent(treeNode* head,treeNode* p);//查找出p的父亲节点的指针
treeNode* BiSortTree::searchMinRight(treeNode* head);//找到右子树中最小的节点
void showTree(treeNode* head);//显示
void destroyTree(treeNode* head);//删除
treeNode *Head;

};
BiSortTree::BiSortTree()
{
cout<<"建立一棵二叉排序树,请输入你要建树的所有数(以-1 作为结束标志!): "< Head=NULL;
int number;
cin>>number;
while(number!=-1)
{
Head=buildTree(Head,number);
cin>>number;

}

}

treeNode* BiSortTree::buildTree(treeNode* head,int number)//建立一个二叉排序树
{
    treeNode *p;   
    p=new treeNode;
    p->key=number;
    p->left=p->right=NULL;
    if(head==NULL)
    {    
         return p;
    }
    else
    { 
        if(p->key<head->key)
            head->left=buildTree(head->left,number);
        else
            head->right=buildTree(head->right,number); 
        return head;
    } 
}   
void BiSortTree::insertTree(int key)//插入一个结点通过调用BuildTree 函数
{
    Head=buildTree(Head,key);
}

treeNode* BiSortTree::searchTree(int key)//查找一个节点调用search函数
{
    return search(Head,key);
}

treeNode*BiSortTree::search(treeNode* head ,int key)//查找
{ 
    if(head==NULL)
    return NULL;
    if(head->key==key)
    return head;
    else
    {
        if(key<head->key )//如果所要查找的关键字的值小于根结点则在其左子树中查找否则在其右子树中查找
        return search( head->left,key);
        else
        return search(head->right,key);
    }
}

int BiSortTree::deleteTree(int key)//删除一个结点
{
    treeNode *p;
    p=NULL;
    p=search(Head,key);//通过search函数先找到关键字
   if(p==NULL)//结点为空找不到关键字
    {
        cout<<"Can't find the key";
    }
    if(p==Head)//如果为头结点则直接删除
    {
        Head=NULL;
    }
    else//否则分为叶子结点,有孩子的结点和左右孩子都有的结点讨论
    {
    treeNode* parent;
        parent=searchParent(Head,p);
        if(p->left==NULL&&p->right==NULL)//叶子节点即p的左右子树都为空
        {
            if(parent->left==p)//if(!parent)
            {
                parent->left=NULL;
            }
            else
            {
         parent->right=NULL;
            }
        }
        else//非叶子节点
        {
            if(p->right==NULL)//该节点没有右孩子
            {
                if(parent->left==p)
                {
                     parent->left=p->left ;
            }
                else
                {
                     parent->right=p->left;
                }
            }
            else//该点有左右孩子
            {
                treeNode * rightMinSon,* secondParent;//secondParent为右子树中的最小节点的父亲
                rightMinSon=searchMinRight(p->right);
                secondParent=searchParent(p->right ,rightMinSon);          
                secondParent->left=rightMinSon->right;                              


                if(p->right==rightMinSon)//右子树中的最小节点的父亲为p
            {     
                    p->right=rightMinSon->right ;

                }     
                p->key=rightMinSon->key ;       
            }
        }
    }
    return 1;
}
treeNode* BiSortTree::searchParent(treeNode* head,treeNode* p)//寻找父亲结点
{
    if(head->left==p||head->right==p||head==p||head==NULL)
    return head;
    else
    {
        if(p->key<head->key)
             return searchParent(head->left ,p);
        else
             return searchParent(head->right ,p);
    }
}
treeNode* BiSortTree::searchMinRight(treeNode* head)//找到右子树中最小的节点
{
    if(head->left ==NULL||head==NULL)
    {
        return head;
    }
    else
    {
        return searchMinRight(head->left);
    } 
}
void BiSortTree::desplayTree(void)//递归中序遍历输出
{
    showTree(Head);
    cout<<endl;
}
void BiSortTree::showTree(treeNode* Head)
{
    if(Head!=NULL)
    {
        showTree(Head->left ) ;
        cout<<Head->key<<' ' ;
        showTree(Head->right) ;
}
}
BiSortTree::~BiSortTree() //调用析构函数,运用递归删除所有的New结点
{
    cout<<"已经消除了一棵树!!!!"<<endl;
    destroyTree(Head);
}
void BiSortTree::destroyTree(treeNode* head ) 
{
    if(head!=NULL)
    {
        destroyTree(head->left );
        destroyTree(head->right );
        delete head;
    }
}
void print()
{
               cout<<"*************以下是对二叉排序树的基本操作*************"<<endl;
              cout<<"                  1.输出二叉树                        "<<endl;
               cout<<"                  2.插入一个节点                     "<<endl;
               cout<<"                  3.查找一个节点                     "<<endl;
               cout<<"                  4.删除一个节点                     "<<endl;
}
int main()
{
    BiSortTree tree;
    int number;
    int choiceNumber;
    char flag;
    while(1)
    {
   print() ;  
       cout<<"请选择你要进行的操作(1~4)"<<endl;
       cin>>choiceNumber;
       switch(choiceNumber)
       {         
          case 1:  
                tree.desplayTree();break;
          case 2:
                cout<<"请插入一个结点: "<<endl;
                cin>>number;
                tree.insertTree(number);
                tree.desplayTree();
                break;   
           case 3:
            cout<<"请输入你要查找的结点: "<<endl;
                cin>>number;  
                if(tree.searchTree(number)==NULL)
                {
                    cout<<"未找到所要查找的结点"<<endl;
                }
                else
                 {

                    cout<<"已找到所要查找的结点"<<endl;  
                 }
                break;
         case 4:
                cout<<"请输入你要删除的数: "<<endl; 
           cin>>number;
            tree.deleteTree(number);
            tree.desplayTree();
                break;
        default: break;
       }
       cout<<"你是否要继续(Y/N)?"<<endl;
       cin>>flag;
       if(flag=='N'||flag=='n')
       break;}
return 1;}
0

1个回答

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
二叉排序树的基本操作-创建,查找,删除,插入(C++)
用顺序表(一维数组)作存储结构,功能如下:(1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T。(2)对二叉排序树T作中序遍历,输出结果。(3)计算二叉排序树T查找成功的平均查找长度,输出结果。(4)输入元素x,查找二叉排序树T:若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”。
二叉排序树的c++实现,查找,删除等
二叉排序树的c++实现#pragma once template <typename T> struct BSTNode { T m_nValue; BSTNode *m_pLeft; BSTNode *m_pRight; }; template <typename T> class BST { public: BST(T r[],int n); void I
二叉排序树的创建,查找,插入,删除
二叉排序树或者是空树,或者是具有以下性质的二叉树: (1)若左子树非空,则左子树上所有结点的关键字的值均小于它的根结点的关键字的值 (2)若右子树非空,则右子树上所有结点的关键字的值均大于等于它的根结点的关键字的值 (3)左右子树本身又是一颗二叉排序树 二叉排序树的查找: 二叉排序树的查找与折半查找类似,根结点相当于查找区间的中点,左子树相当于前半子区间,右子树相当于后半子区间。查找过程为:
数据结构 二叉排序树的创建,查找,插入,删除
Description 实现二叉排序树的创建、查找、插入、删除操作。 Input 10 62 88 58 47 35 73 51 99 37 93 59 58 Output 输入二叉树的节点个数 开始建树BST,请输入10个节点 二叉排序树BST创建完成, 接下来进行中序遍历 35 37 47 51 58 62 73 88 93 99 接下来进行二叉排序树的查找,请输入
二叉排序树的构造,插入,删除,完整c代码实现
#include   #include    typedef struct BiTNode{       int data;       struct BiTNode *lchild, *rchild;   }BiTNode, *BiTree;    //在给定的BST中插入结点,其数据域为element   void BSTInsert( BiTree *t, int elem
重温数据结构:二叉排序树的查找、插入、删除
读完本文你将了解到: 什么是二叉排序树 Binary Sort Tree BST 二叉排序树的关键操作 查找 插入 删除 运行代码测试 一道面试题 总结 Thanks 我们知道,二分查找可以缩短查找的时间,但是有个要求就是 查找的数据必须是有序的。每次查找、操作时都要维护一个有序的数据集,于是有了二叉排序树这个概念。上篇文章 我们介绍了 二叉树 的概念,二叉树有左右子树之分,想必在区分左右子树时有
二叉排序树(查找、插入、删除)
1.二叉排序树 二叉排序树又称二叉查找数,它或者是一棵空树,或者是具有下列性质的二叉树 1.若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值 2.若它的右子树不为空,则右子树上所有结点的值均大于它的根结构的值 3.它的左右子树也分别为二叉排序树(递归) 比如现在有一个无序序列 想要生成一个二叉排序树,首先将70 作为根节点  将105作为70 的右子树, ...
二叉排序树的建立、插入、查找和删除
代码里有二叉排序树插入操作递归算法,二叉排序树插入操作非递归算法,二叉排序树删除操作,创建二叉排序树,二叉排序树查找递归算法,二叉排序树查找非递归算法
建立二叉排序树,并实现插入、查找等操作
#include &amp;lt;iostream&amp;gt;using namespace std;struct BSTNode{    int data;    BSTNode *lchild;    BSTNode *rchild;};void insertBST(BSTNode *&amp;amp;T,int e){ if(T) { if(e &amp;lt; T-&amp;gt;data) insertBST(T-&amp;...
二叉查找树(二叉排序树)创建、插入、删除、查找-C语言
二叉查找树:或者是一颗空树;或者是具有以下性质的二叉树:(1)若它的左子树不为空,则左子树上所有结点的值都小于根结点的值;(2)若它的右子树不为空,则右子树所有结点的值均大于它的根结点的值;(3)左右子树分别为二叉查找树;#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define N 7 //插入查找树数组长度 /* 二
二叉排序树(BST)的创建,查找,插入,删除及最大最小结点
数组总长度为F[K]-1,mid前面长度为F[K-1]-1,后面长度为F[K-2]-1,mid在黄金分割点。 #include&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; using namespace std; const int max_size = 20; //斐波那契数组的长度
二叉排序树的基本操作(完整代码)
以下是二叉排序树的基本操作,函数基本与《大话数据结构》里的代码类似,包括查找、插入、删除操作。完整代码,可直接运行,懒人必备。//二叉排序树 //其中有插入、删除、查找操作 #include<stdio.h> #include<stdlib.h>#define FALSE 0 #define TURE 1 #define MAXSIZE 10typedef struct BiTNode {
二叉排序树的基本操作(建立,中序遍历,查找,删除,插入)
分析: 二叉排序树的操作的难点在于删除操作,删除操作时,只需要满足二叉排序树的性质即可,即需要找到要删除结点p的左孩子的最右下方的数替代该结点的数据,然后删除p->lchild的最右下方的结点即可。 对于p->lchild==NULL的,只需要让双亲结点直接指向p->rchild即可(对于根节点,只需要改变头指针)。 对于p->lchild没有右子树的,让删除结点左孩子的数据赋值到删除结点上
【数据结构周周练】019 利用递归算法创建二叉排序树并遍历
 一、二叉排序树 从今天起,就给大家分享二叉排序树的代码啦,首先给大家简单讲解一下相关概念。 二叉排序树也称为二叉查找树,二叉排序树是一棵空树或具有如下性质: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的节点。 二叉排序树有这样一个特点:左...
数据结构与算法分析--二叉排序树(二叉查找树,二叉搜索树)的查找、插入和删除操作
什么是二叉排序树 它表示一棵二叉树,并且包含以下性质: 1)可能是一棵空树 2)若不为空,那么其左子树结点的值都是小于根结点的值,右子树结点的值都是大于根结点的值 3)左右子树都是二叉树。 对于二叉排序树功能的介绍 本文主要介绍的是二叉排序树的几种基本操作,包括查找、插入和删除操作。用到的二叉排序树如下图所示: 二叉排序树的建立 二叉树结点的创建: typedef struct BiTNo
数据结构进阶(四)二叉排序树(二叉查找树)
二叉排序树(二叉查找树)--查找    注:构造一棵二叉排序树的目的,其实并不是为了排序(中序遍历),而是为了提高查找、插入、删除关键字的速度。定义    二叉排序树又叫二叉查找树,英文名称是:Binary Sort Tree.BST的定义就不详细说了,我用一句话概括:左     二叉查找树是满足以下条件的二叉树:    1.左子树上的所有节点值均小于根节点值;    2.右子树上的所有节点值均不
二叉排序树(BST查找、插入、删除、遍历)——基于树的查找(一)
二叉排序树 二叉排序树(Binary Search Tree,BST):又称二叉查找树,是一种高效的数据结构。 定义 二叉排序树或者是一棵空树,或者是具有如下特性的二叉树: 若左子树不空,则左子树上所有结点的值均小于或等于根结点的值; 若右子树不空,则右子树上所有结点的值均大于或等于根结点的值; 左、右子树也分别为二叉排序树 如下便是一棵二叉排序树 根据定义,再根据二叉树中...
二叉排序树(二叉查找树)BST构造,节点插入,节点查找,节点删除(java)
二叉排序树(BST)的构造,节点插入,节点查找,节点删除(java) 高度最小BST(同样数据,顺序可能不一样) package ccnu.offer.tree;import java.util.ArrayList; import java.util.Arrays;// 二叉排序树(二叉查找树)BST // 对于给定数组(数据完全一样,并且数据顺序一定)构造二叉排序树一定,但是数据一样,顺序不一样
二叉排序树
一、二叉排序树简介 二叉排序树,又叫二叉查找树,它或者是一棵空树;或者是具有以下性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 它的左右子树也分别为二叉排序树。 二、二叉排序树的创建 假设我们要为数组 a[] = {62, 88, 58, 47, 35, 73, 51, 99, 37, 9...
C++实现二叉排序树BSTree --插入删除摧毁查找等操作
一:二叉排序树定义 二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。 二叉排序树是这样一棵树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的结点。 二:删除算法(重点)
二叉排序树的实现(建树 中序遍历 查找 删除)
二叉排序树的实现 二叉链表作存储结构 1) 以回车为输入结束标志,输入数列L,生成一棵二叉排序树T; 2) 对二叉排序树T作中序遍历,输出结果; 3) 输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点, 并作中序遍历(执行操作2);否则输出信息“无x”
二叉排序树创建、查找、插入、删除操作 《大话数据结构》 c++实现代码
二叉排序树 二叉排序树也是一棵二叉树,所谓二叉树,就是“任何节点最多只允许两个子节点”,这两个子节点称为左右子节点。 //二叉排序树 #include&amp;lt;iostream&amp;gt; using namespace std; typedef int status; #define true 1 #define false 0 //二叉链表结点结构定义 typedef struct B...
二叉树:实现java操作二叉排序树(生成、插入、遍历、删除)
首先来了解一下二叉排序树的由来,也就是在什么情况下迫使老一辈头脑风暴的科学家发明使用这种方法。 先说普通顺序存储(注意并不是有序),先来先坐,有点类似于“栈”。插入数据直接放到最末尾,删除中间数据的话可以把待删除数据和最后一位数据进行互换,也可以把待删除数据后的全部数据统一往前挪一位。这里实在没有顺序的前提下,删除和插入的效率都没有毛病,但是查找就有点差强人意了,或者说效果很悲观。 那么对于有
Java实现动态表查找--二叉排序树
定义 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:  (1)若左子树不空,则左子树上所有结点的键值均小于或等于它的根结点的键值;  (2)若右子树不空,则右子树上所有结点的键值均大于或等于它的根结点的键值;  (3)左、右子树也分别为二叉排序树; 如下图: 树的遍历方法: (1)层次遍历:按照树的层次进行遍历,如图树:8、3、10、1、6、14、4、7、
【数据结构】---二叉排序树查找、插入、删除
1、 定义:二叉排序树是一颗空树或者是具有一下性质的二叉树。          (1)若它的左子树非空,则左子树上所有的结点值均小于根结点的值。          (2)若它的右子树非空,则右子树上所有的结点的值均大于(或等于)根结点的值。          (3)它的左右子树也分别是二叉排序树。 2、二叉排序树 查找、插入、删除实现算法 #include &amp;lt;stdio.h&amp;gt; #...
二叉排序树的建立,删除,遍历,查找,最大值,最小值--java实现
目录   二叉排序树(Binary Sort Tree) 定义 二叉排序树的建立 二叉排序树的遍历 二叉排序树的查找 二叉树的最小值,最大值 二叉树的删除 总结: 二叉排序树(Binary Sort Tree) 又称二叉查找数(Binary Search Tree),亦称二叉搜索树。 定义  二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: 若左子树不空,则左...
二叉排序树(新建,插入,查找,删除)(C语言编写)
#include #include typedef struct BSTNode{         int data;         struct BSTNode *lchild,*rchild; }BSTNode,*BSTree; BSTree InsertBST(BSTree T,int data); BSTree CreatBST(BSTree T)
二叉排序树的实现和查找
按照给定的关键字集合,建立二叉排序树。在建立的二叉排序树上查找指定的关键字,查找成功,输出找到该关键字比较的次数;查找不成功,输出-1.输入关键字个数n; 关键字集合; 要查找的关键字;输出查找成功输出比较的次数,否则输出-1。样例输入12 25 18 46 2 53 39 32 4 74 67 60 11 74 样例输出4#include&amp;lt;iostream&amp;gt; #include&amp;l...
数据结构与算法-二叉排序树创建、查找、删除(Swift实现)
概要基本概念二叉排序树查找二叉排序树插入二叉排序树创建二叉排序树删除删除叶子结点或仅有左右子树之一的结点删除左右子树都有的结点总结 基本概念 二叉排序树(Binary Sort Tree),又称为二叉查找树。它或者是一棵空树,或者是具有下列性质的二叉树。 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右...
搜索二叉树的基本操作(增加,删除,查找)递归与非递归算法
二叉搜索树概念: 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的 二叉树 1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 3。它的左右子树也分别为二叉搜索树 建立结构体: typedef int Datatype; typedef struct BSTreeNode { st
实验八 二叉排序树的查找
ZZU的学弟学妹们不要抄作业哦~(`Д´) 一、实验目的 1.掌握二叉排序树的含义及其在计算机中的存储实现。 2.掌握在二叉排序树上查找操作的算法实现。 3.掌握二叉排序树的插入、删除操作的算法实现。   二、实验内容 1.建立二叉排序树。 2.在二叉排序树上实现对给定值进行查找操作。 3.在二叉排序树上实现插入、删除一个指定结点。   三、实验要求 1.建立二叉排序树。 ...
二叉排序树的建立和查找(面试常考)
在众多查找方法中,二叉排序树查找是比较好的一种查找,其效率比顺序查找,折半查找,插值查找,斐波纳契查找等都要好。二叉排序树的建立首先要了解而叉排序树如何建立,给定一组数组,建立一个而叉排序树#include <iostream> typedef struct BitNode{ int data; struct BitNode *lchild, *rchild; }BitNode, *B
数据结构(22)--动态查找之二叉排序树(二叉查找树)
参考书籍:数据结构(C语言版)严蔚敏吴伟民编著清华大学出版社 本文中的代码可从这里下载:https://github.com/qingyujean/data-structure 1.动态查找表 特点:表结构在查找过程中动态生成。 要求:对于给定值 key, 若表中存在其关键字等于 key的记录,则查找成功返回,并且对查找成功的关键字可做删除操作;查找失败则可以做插入关键字等于 key的记录的...
c语言实现二叉排序树的插入、查找、删除、打印树
c语言实现二叉树的插入、查找、删除、打印树
二叉排序树C语言实现二
二叉排序树删除节点图文详解及其C语言实现
二叉排序树的创建和删除
实验目的1.  掌握各种查找方法的基本思想、特点及所适应的不同场合。2.  熟练掌握顺序查找、折半查找、索引查找、二叉排序树查找和哈希表查找算法及其实现。3.  能用所学的查找方法解决实际问题。实验预习   在实验预习报告上设计,编写实验内容的源程序,给程序加上适当的注释,设计运行程序所需的测试数据。实验内容1.  设计并验证如下算法:二叉树采用二叉链表结构表示,按输入的关键字序列建立一棵二叉排序...
动态查找表(二叉排序树)
动态查找表的特点是:表结构在查找过程中动态生成的,即对于给定值key,若表中存在等于key的记录,则查找成功,否则插入关键字key的记录。 1、二叉排序树 (1)、可以是空树 (2)、满足下列条件:若左子树不空,则所有的左子树值小于根节点值。 若右子树不空,则所有的右子树值大于根节点值。 他的左右子树也分别是二叉排序树。 如:这样的一个二叉排序树,A为空格先序遍历:45  12  3
用c++实现一个二叉排序树
二叉排序树又称二叉查找树(Binary Search Tree)。其定义为:二叉排序树或者收空树,或者是满足如下性质的二叉树。 (1)若它的左子树非空,则左子树上所有节点的值均小于根节点的值。 (2)若它的右子树非空,则右子树上所有节点的值均大于根节点的值。 (3)左右子树本身又各是一颗二叉排序树。 二叉排序树数据结构如下://节点类定义 class Node { int dat
二叉排序树(Binary Sort Tree)查找、插入、删除 Java实现
顺序存储的插入和删除可以通过在表末端插入和删除元素同最后一个元素互换来保持高效率,但是无序造成查找的效率很低。 如果查找的数据表是有序线性表,并且是顺序存储的,查找可以折半、插值、斐波那契等查找算法来实现,但是因为有序在插入和删除操作上,就需要耗费大量时间。 二叉排序树可以使得插入和删除的效率不错,又可以比较高效率地实现查找。 二叉排序树(Binary Sort Tree),又称为二
(2) 建立一棵二叉排序树,然后进行中序遍历,并实现动态查找。
(2) 建立一棵二叉排序树,然后进行中序遍历,并实现动态查找。(输入零为空) 头文件:1.h #include &amp;lt;iostream&amp;gt; #include &amp;lt;malloc.h&amp;gt; #include &amp;lt;string.h&amp;gt; #define TRUE 1 #define FALSE 0 #define ERROR 0 #define INFEASIBLE -1 #defi...