typedef struct TreeNode *Position;
typedef struct TreeNode *SearchTree; struct TreeNode{
ElementType X;
SearchTree Left;
SearchTree Right;
}; //建立一颗空树的例程
SearchTree
MakeEmpty( SearchTree T )
{
if( T != NULL )
{//先做空儿子,在弄父亲
MakeEmpty(T->Left);
MakeEmpty(T->Right);
free(T);
}
return NULL;//避免返回值的警告
}
//二叉查找树的Find操作(尾递归)
SearchTree
Find( SearchTree T, ElementType X )
{
if( T == NULL )
return NULL;
if( T->Element > X )
return Find( T->Left, X );
else if( T->Element < X )
return Find( T->Right, X );
else
return T;
}
//对二叉查找树FindMin操作(非递归实现,自创)
SearchTree
FindMin( SearchTree T )
{
SearchTree Tmp; if(T == NULL )
return NULL;//空树 Tmp = T->Left;
while( Tmp != NULL )
{
T = Tmp;
Tmp = Tmp->Left;
}
return T->Element;
}
//FindMin操作非递归实现正解
SearchTree
FindMin( SearchTree T )
{
if(T != NULL )
{
while( T->Left != NULL )
T = T->Left;
}
return T;
}
//FindMin递归正解
SearchTree
FindMin( SearchTree T )
{
if( T == NULL )
return NULL;
if( T->Left != NULL ){
T = T->Left;
return FindMin( T );
}
else
return T;
}
//FindMax非递归
SearchTree
FindMax( SearchTree T )
{
if( T == NULL )
return NULL;
while( T->Right != NULL )
{
T = T->Right;
}
return T;
}
//FindMax递归
SearchTree
FindMax( SearchTree T )
{
if( T == NULL )
return NULL;
if( T->Right != NULL ){
T = T->Right;
return FindMax( T );
}
return T;
}
//FindMax递归超正解
SearchTree
FindMax( SearchTree T )
{
if( T == NULL )
return NULL;
else
if( T->Right == NULL )
return T;
else
return FindMax( T->Right );
}

二叉树的节点儿子不多于两个,针对每个节点,且左子树所有数比节点小,右子树所有数比节点大

二叉查找树的Find,FindMin,FindMax的递归和非递归实现的更多相关文章

  1. C语言实现 二分查找数组中的Key值(递归和非递归)

    基本问题:使用二分查找的方式,对数组内的值进行匹配,如果成功,返回其下标,否则返回 -1.请使用递归和非递归两种方法说明. 非递归代码如下: #include <stdio.h> int ...

  2. 二叉树之AVL树的平衡实现(递归与非递归)

    这篇文章用来复习AVL的平衡操作,分别会介绍其旋转操作的递归与非递归实现,但是最终带有插入示例的版本会以递归呈现. 下面这张图绘制了需要旋转操作的8种情况.(我要给做这张图的兄弟一个赞)后面会给出这八 ...

  3. 汉诺塔算法的递归与非递归的C以及C++源代码

    汉诺塔(又称河内塔)问题其实是印度的一个古老的传说. 开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一 个小, ...

  4. 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java

    前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...

  5. C实现二叉树(模块化集成,遍历的递归与非递归实现)

    C实现二叉树模块化集成 实验源码介绍(源代码的总体介绍):header.h : 头文件链栈,循环队列,二叉树的结构声明和相关函数的声明.LinkStack.c : 链栈的相关操作函数定义.Queue. ...

  6. 二叉树3种递归和非递归遍历(Java)

    import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...

  7. 简单迷宫算法(递归与非递归C++实现)

    假定迷宫如下:1代表墙,0代表道路,起点在(1,1),终点(11,9)(PS:下标从0开始计算). 现在寻求一条路径能从起点到达终点(非最短). 有两种解法:递归与非递归. 递归算法思路: 要用递归, ...

  8. JAVA递归、非递归遍历二叉树(转)

    原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...

  9. java扫描文件夹下面的所有文件(递归与非递归实现)

    java中扫描指定文件夹下面的所有文件扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种方式来遍历指定文件夹下面的所有文件.递归方式非递归方式(采用队列或者栈实 ...

  10. 二叉树前中后/层次遍历的递归与非递归形式(c++)

    /* 二叉树前中后/层次遍历的递归与非递归形式 */ //*************** void preOrder1(BinaryTreeNode* pRoot) { if(pRoot==NULL) ...

随机推荐

  1. JIT和程序的首次执行

    由于C#源代码经过编译器编译生成的是IL代码,而IL是与CPU无关的机器语言.因此当程序运行于特定的CPU时,首先必须将IL转换成本地CPU指令,这正是JIT(Just-In-Time)编译器的任务. ...

  2. shell基础——字符串连接

    #!/bin/sh str1="hello" str2="world" echo str1=$str1, str2=$str2 strconn1=$str1$s ...

  3. Android事件侦听器回调方法浅谈

    http://developer.51cto.com/art/201001/180846.htm Android事件侦听器作为视图View类的接口,其中包含有不少回调方法,比如:onClick():o ...

  4. USB mass storage协议

    这一节主要把在实现“linux模拟U盘功能”过程中的一些调试过程记录下来,并加以解析. 一.背景知识     1.USB Mass Storage类规范概述        USB 组织在univers ...

  5. Windows Components Reference(Windows组件参考)

    原文 http://www.msfn.org/board/topic/127287-windows-components-reference/ green means the component na ...

  6. linux之SQL语句简明教程---CREATE VIEW

    视观表 (View) 可以被当作是虚拟表格.它跟表格的不同是,表格中有实际储存资料,而视观表是建立在表格之上的一个架构,它本身并不实际储存资料. 建立一个视观表的语法如下: CREATE VIEW & ...

  7. Android学习之SharedPreferences类

    SharedPreferences类 android.content.SharedPreferences 类概括: 访问和修改由函数getSharedPreferences(String,int)返回 ...

  8. #include <hash_set>

    哈希查找,不需要排序,适用于精确查找,比二分查找更快 #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS #include <iostream&g ...

  9. C#委托的异步调用【转】

    本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: ); //模拟该方法运 ...

  10. android笔记1——开发环境的搭建

    Long Long ago...已经成为了历史,我还是要说出一个真相:早年前,那时候,android还不被大众所认知的时候,当然开发人员也没不像如今那样趋于饱和状态.一位大牛前辈,也是我的学长,那时候 ...