`
jaychang
  • 浏览: 734609 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

二叉排序树的递归与非递归查找

 
阅读更多
#include<iostream>

using namespace std;

//定义二叉树结点
typedef struct BiTreeNode{
  int value;
  BiTreeNode *lChild,*rChild;
}BiTreeNode,*BiTree;

//将结点插入为根节点的孩子结点,如果值小于根节点值,则插入到左子树
void InsertBiTree(BiTree *bst,int value)
{
  //递归结束条件,形成叶子结点
  if(*bst==NULL)/
  {
     BiTreeNode *s=(BiTreeNode *)malloc(sizeof(BiTreeNode));
     s->value=value;
     s->lChild=NULL;s->rChild=NULL;
     *bst=s;
  }
  else if(value<(*bst)->value)
  {
     InsertBiTree(&((*bst)->lChild),value);
  }
  else if(value>(*bst)->value)
  {
     InsertBiTree(&((*bst)->rChild),value);
  }
}

//创建一棵二叉排序树
void CreateBiTree(BiTree *root)
{
  int value;
  *root=NULL;
  cout<<"请输入一系列正整数,以便构成二叉排序树,以-1结束\n";
  cin>>value;
  while(value!=-1)
  {
     InsertBiTree(root,value);
     cin>>value;
  }
}

//中序遍历二叉排序树,得到从小到大的正整数序列
void VisitBiTree(BiTree *root)
{
  if(*root!=NULL)
  {
     if((*root)->lChild!=NULL)
       VisitBiTree(&((*root)->lChild));
     cout<<(*root)->value<<"\n";
    if((*root)->rChild!=NULL)
      VisitBiTree(&((*root)->rChild));
  }
}

//(非递归)查找二叉排序树某一结点
BiTree * SeekBiTreeNode1(BiTree *root,int value)
{
  BiTree *q=root;
  while(*q!=NULL)
  {
     if((*q)->value==value)return q;
     else if((*q)->value>value)(*q)=(*q)->lChild;
     else if((*q)->value<value)(*q)=(*q)->rChild;
  }
  return NULL;
}

//递归查找二叉排树某一结点
BiTree * SeekBiTreeNode2(BiTree *root,int value)
{
  if((*root)==NULL)return NULL;
  else
  {
    if((*root)->value==value)return root;
    else if((*root)->value>value)SeekBiTreeNode2(&((*root)->lChild),value);
    else if((*root)->value<value)SeekBiTreeNode2(&((*root)->rChild),value);
  }
}

int main()
{
  bool loop=true;int value;
  char cmd;
  while(loop){
     BiTree *root=(BiTree *)malloc(sizeof(BiTreeNode));
     CreateBiTree(root);
     VisitBiTree(root);
     cout<<"输入要查找结点的值\n";
     cin>>value;
     if(SeekBiTreeNode1(root,value)!=NULL)
       cout<<"Found the value"<<" "<<value<<"\n";
     else
       cout<<"Not found\n";
     if(SeekBiTreeNode2(root,value)!=NULL)
       cout<<"Found the value"<<" "<<value<<"\n";
    else
      cout<<"Not found\n";
    cout<<"继续吗? Y/y \n";
    cin>>cmd;
    loop=(cmd=='y'||cmd=='Y')?true:false;
  }
  return 0;
}
 
分享到:
评论

相关推荐

    二叉排序树的建立、插入、查找和删除

    代码里有二叉排序树插入操作递归算法,二叉排序树插入操作非递归算法,二叉排序树删除操作,创建二叉排序树,二叉排序树查找递归算法,二叉排序树查找非递归算法

    二叉排序树插入

    在编写二叉排序树插入算法时,可以采用递归或非递归两种方式。递归实现简单直观,利用递归调用自身来完成查找和插入操作;非递归实现则使用循环结构,通常需要借助栈来模拟递归过程。无论是哪种实现方式,都必须确保...

    数据结构课程设计 二叉排序树与平衡二叉排序树

    在数据结构的学习中,二叉排序树(Binary Search Tree,BST)是一种常见的树形数据结构,它具有查找、插入和删除等操作的高效性。在这个课程设计中,我们将重点探讨如何利用二叉链表作为存储结构来实现二叉排序树,...

    二叉排序树查找

    根据提供的文件信息,本文将详细解释二叉排序树(Binary Search Tree, BST)的基本概念、构建过程、插入操作以及查找操作。二叉排序树是一种非常有用的动态数据结构,它不仅支持快速查找,还支持插入、删除等操作。 ...

    二叉排序树 建立 查询 删除

    二叉排序树(Binary Search Tree,BST),也称为二叉查找树,是一种特殊的二叉树数据结构,它的每个节点都包含一个键值、一个指向左子树的指针和一个指向右子树的指针。在二叉排序树中,对于任意节点,其左子树中的...

    二叉排序树

    然后,我们将实现SearchBST1函数,该函数用于非递归地查找一个二叉排序树中的特定节点。如果当前节点为空或关键字等于当前节点的关键字,则返回当前节点;否则,如果关键字小于当前节点的关键字,则输出当前节点的...

    数据结构课程设计二叉排序树的实现

    在存储一个班级成员信息时(包括学号、姓名、成绩等),使用二叉排序树与数组进行存储并比较其查找效率。 **4.1 数组存储** 数组的优点在于访问速度快,但缺点是在插入和删除时需要移动大量元素。 **4.2 二叉排序...

    数据结构课程设计二叉排序树

    1. **二叉排序树的查找**:查找操作是二叉排序树的基本操作之一。从根节点开始,如果待查找的键等于当前节点的键,则返回当前节点;如果待查找的键小于当前节点的键,递归地在左子树中查找;如果待查找的键大于当前...

    二叉排序树最新版本.pdf

    1.2.2对二叉排序树进行先根、中根、和后根非递归遍历; 1.2.3每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 1.2.4分别用二叉排序树和数组去存储一个班(50 人以上)的成员信息(至少包括...

    二叉排序树.zip

    二叉排序树.zip 程序设计实践课程设计C++程序源代码 ... (3) 采用递归和非递归两种方法查找关键字为6的结点,并输出其查找路径; (4) 分别删除bt中的关键字为4和5的结点,并输出删除后的二叉排序树。

    二叉排序树相关操作

    二叉排序树,又称二叉查找树或二叉排序树(Binary Search Tree, BST),是一种特殊的二叉树数据结构,其每个节点的值都大于其左子树中的所有节点值,且小于其右子树中的所有节点值。这种特性使得在二叉排序树中进行...

    写一算法,判断一棵二叉树是否是一棵二叉排序树。

    通过以上分析,我们可以看出无论是递归还是非递归的方法,都能够有效地解决判断二叉树是否为二叉排序树的问题。递归方法虽然简洁易懂,但可能会导致较大的递归深度;而非递归方法虽然稍微复杂一些,但能够有效地控制...

    数据结构 二叉排序树算法

    根据给定文件的信息,我们可以将相关的知识点概括如下...以上是关于二叉排序树算法的基本知识点介绍,这些方法涵盖了二叉排序树的主要操作,包括插入、查找、遍历以及统计等,对于理解和实现二叉排序树具有重要的意义。

    二叉排序树的查找,删除与判断

    该算法成功解决了二叉排序树的查找(递归和非递归),节点删除,括号表示法输出的问题,算法基本按照数据结构课本的内容来编写,比较适合初学者对二叉排序树的学习,当然改进的空间还很大

    二叉排序树操作。。。。。

    二叉排序树,又称二叉查找树或二叉搜索树,是一种特殊的二叉树数据结构,它具有以下特性:每个节点的左子树只包含比该节点小的元素,而右子树则只包含比该节点大的元素。这种结构使得在二叉排序树中进行查找、插入和...

    较全的二叉排序树程序

    二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构。它满足以下性质:对于任意节点,其左子树中的所有节点的值都小于该节点的值,右子树中的所有节点的值都大于该...

    数据结构课程设计-二叉排序树操作演示系统-C代码&说明文档

    二叉排序树是一种重要的数据结构,它具有高效的查找、插入和删除功能,尤其在有序数据处理中具有显著优势。 二叉排序树,又称二叉查找树,它的特性是每个节点的左子树只包含小于该节点的元素,右子树则包含大于或...

    基于二叉排序树写的通讯录

    **二叉排序树(Binary Search Tree)的概念与特性** - **概念**:二叉排序树是一种特殊的二叉树,其中每个节点包含一个关键字,左子树中的所有节点的关键字均小于其父节点的关键字,右子树中的所有节点的关键字均...

    二叉排序树C++实现

    这种特性使得在二叉排序树中查找、插入和删除操作的时间复杂度可以达到O(log n),在理想情况下,性能优于其他非自平衡二叉搜索结构。 在C++中实现二叉排序树,我们需要定义一个结构或类来表示树的节点,包括节点的...

    转载 查找算法 二叉排序树.doc

    二叉排序树,也被称为二叉查找树,是一种特殊类型的二叉树,其设计目的是为了高效地执行查找、插入和删除等操作。它满足以下三个特性: 1. 如果二叉排序树为空,那么它就是空树。 2. 如果树不为空,那么左子树中...

Global site tag (gtag.js) - Google Analytics