二叉查找树的Find,FindMin,FindMax的递归和非递归实现
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的递归和非递归实现的更多相关文章
- C语言实现 二分查找数组中的Key值(递归和非递归)
基本问题:使用二分查找的方式,对数组内的值进行匹配,如果成功,返回其下标,否则返回 -1.请使用递归和非递归两种方法说明. 非递归代码如下: #include <stdio.h> int ...
- 二叉树之AVL树的平衡实现(递归与非递归)
这篇文章用来复习AVL的平衡操作,分别会介绍其旋转操作的递归与非递归实现,但是最终带有插入示例的版本会以递归呈现. 下面这张图绘制了需要旋转操作的8种情况.(我要给做这张图的兄弟一个赞)后面会给出这八 ...
- 汉诺塔算法的递归与非递归的C以及C++源代码
汉诺塔(又称河内塔)问题其实是印度的一个古老的传说. 开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一 个小, ...
- 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java
前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...
- C实现二叉树(模块化集成,遍历的递归与非递归实现)
C实现二叉树模块化集成 实验源码介绍(源代码的总体介绍):header.h : 头文件链栈,循环队列,二叉树的结构声明和相关函数的声明.LinkStack.c : 链栈的相关操作函数定义.Queue. ...
- 二叉树3种递归和非递归遍历(Java)
import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...
- 简单迷宫算法(递归与非递归C++实现)
假定迷宫如下:1代表墙,0代表道路,起点在(1,1),终点(11,9)(PS:下标从0开始计算). 现在寻求一条路径能从起点到达终点(非最短). 有两种解法:递归与非递归. 递归算法思路: 要用递归, ...
- JAVA递归、非递归遍历二叉树(转)
原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...
- java扫描文件夹下面的所有文件(递归与非递归实现)
java中扫描指定文件夹下面的所有文件扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种方式来遍历指定文件夹下面的所有文件.递归方式非递归方式(采用队列或者栈实 ...
- 二叉树前中后/层次遍历的递归与非递归形式(c++)
/* 二叉树前中后/层次遍历的递归与非递归形式 */ //*************** void preOrder1(BinaryTreeNode* pRoot) { if(pRoot==NULL) ...
随机推荐
- Photoshop技能167个经典的Photoshop技巧大全
Photoshop技能167个经典的Photoshop技巧大全 学PS基础:Photoshop 技能167个 经典的Photoshop技巧大全,如果你是初级阶段的水平,熟读此文并掌握,马上进阶为中级 ...
- FTP的主动模式和被动模式
摘自http://blog.csdn.net/love_gaohz/article/details/50723164 http://my.oschina.net/binny/blog/17469 FT ...
- 无组件客户端js图片压缩
<div class="free-upload"> <p>上传您的约会照片,一张合影.一张票据哦!</p> <div class=&quo ...
- poj2488 A Knight's Journey
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24840 Accepted: ...
- 黑马程序员_<<Set,HashSet>>
--------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1.Set Set是Collection接口 ...
- Wheel ProgressBar 实现之三——模拟进度过程
1. 效果展示: 知道如何画圆弧,如何精确画出进度文本之后,我们将进入 Wheel ProgressBar 实现的最后一个过程:模拟其动态呈现过程.如下图所示,初始时显示进度为 0 (上图),点击进度 ...
- MySQL之终端(Terminal)管理MySQL(转)
前言:MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”. 现在我写MySQL的终端命令操作的文章,是想强化一下自己对于MySQL的理解,总会比使用图 ...
- MatLab实现FFT与功率谱
FFT和功率谱估计 用Fourier变换求取信号的功率谱---周期图法 clf; Fs=1000; N=256;Nfft=256;%数据的长度和FFT所用的数据长度 n=0:N-1;t=n/Fs;%采 ...
- js在线题目
在线题目: https://www.nowcoder.com/ta/js-assessment
- 黑科技——编写一个无法卸载的App
之前经常听到朋友或者新闻媒体上报道说,有的朋友的android手机中病毒了,出现了软件无法卸载的情况,对于我这样一个从事android开发程序员来说,我还不是太相信(毕竟自己还是有点菜,哈哈).今天在 ...