`
jaychang
  • 浏览: 716085 次
  • 性别: 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;
}
 
分享到:
评论

相关推荐

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

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

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

    2)对二叉排序树进行先根、中根、 和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 例如,a 为根,左右孩子是 bc,b 的孩子是 de,c 的孩子是 fg. 也可以像...

    二叉排序树最新版本.pdf

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

    二叉排序树 建立 查询 删除

    MFC 二叉排序树 建立 查询 删除 数据结构 实验

    二叉排序树.zip

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

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

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

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

    二叉排序树的查找插入删除打印演示,可多个同时查找插入删除,树的横向打印有图片,输入以0结束

    数据结构 二叉排序树算法

    /*用函数实现如下二叉排序树算法: (1) 插入新结点 (2) 前序、中序、后序遍历二叉树 (3) 中序遍历的非递归算法 (4) 层次遍历二叉树 (5) 在二叉树中查找给定关键字(函数返回值为成功1,失败0) (6) ...

    二叉排序树相关操作

    二叉排序树的相关操作 有删除,插入,查找,遍历(递归与非递归)等操作!

    数据结构 实现二叉排序树的各种算法(2)

    用函数实现如下二叉排序树算法: (1) 插入新结点 (2) 前序、中序、后序遍历二叉树 (3) 中序遍历的非递归算法 (4) 层次遍历二叉树 (5) 在二叉树中查找给定关键字(函数返回值为成功1,失败0) (6) ...

    二叉排序树的基本操作

    二叉排序树的建立;前序、中序、后序遍历(递归实现);关键字查找(递归实现)。可以参考修改。输入数据时回车隔开;查找关键字时非数字输入结束

    二叉排序树查找

    超级好用 !!

    数据结构 实现二叉排序树的各种算法(1)

    用函数实现如下二叉排序树算法:(1) 插入新结点(2) 前序、中序、后序遍历二叉树(3) 中序遍历的非递归算法(4) 层次遍历二叉树(5) 在二叉树中查找给定关键字(函数返回值为成功1,失败0) Input 第一行:准备...

    二叉排序树.rar

    查找算法,二叉排序树,二叉树层次遍历,二叉树非递归遍历,二叉树的建立,关键字匹配查找等。 如有问题,可随时私信。 初学C语言必须掌握的一些基础知识,包括直接选择排序、直接插入排序、冒泡排序、快速排序。 ...

    c++数据结构--二叉排序树

    vs2010环境下c++实现二叉排序树,内容:有建立二叉排序树--非递归;创建二叉排序树--递归法;查找二叉排序树的某个值域的值为k的结点--递归法--含有”前序遍历“思想;二叉树的前序遍历,中序遍历,后序遍历...

    二叉树排序树建立及平衡处理

    在根指针T所指的平衡二叉排序树中递归的查找其元素值等于e的数据元素, 若查找成功,则指针p指向该数据元素结点,并返回TRUE,否则指针p 指向查找路径上访问的最后一个结点并返回FALSE,指针f指向T的双亲, 其初始...

    Edogawaconann#CS408-1#二叉排序树1

    二叉排序树的非递归查找算法二叉排序树的插入算法int BST_Insert(BiTree &T, KeyType k){

    二叉排序树

    插入二叉排序树结点,先序递归遍历,中序递归遍历,中序非递归遍历,后序递归遍历,层次遍历,查找关键字,交换左右子树,二叉排序树的深度,二叉排序树的叶子结点数

    二叉树非递归遍历.rar

    查找算法,二叉排序树,二叉树层次遍历,二叉树非递归遍历,二叉树的建立,关键字匹配查找等。 如有问题,可随时私信。 初学C语言必须掌握的一些基础知识,包括直接选择排序、直接插入排序、冒泡排序、快速排序。 ...

    python 数据结构 算法 LeetCode 牛客 面试 编程之美 动态规划 字典树 快速排序 树 字符串 数组 链表 全排列

    树 * 字典树 ...* 二叉查找树-从有序数组中构造二叉查找树 * 二叉查找树-从有序链表构造平衡的二叉查找树 * 二叉树-的最大深度 数组&字符串 查找排序 排列组合 动态规划 树 链表 数学 位运算 编程之美

Global site tag (gtag.js) - Google Analytics