二叉搜索树的搜索【C语言】

二叉搜索树的搜索【C语言】

五一假期前一天仍旧苦逼的上着早八晚十的小白
今天依旧要坚持数据结构的学习

那么今天就来看看有关二叉搜索树的应用吧

先说说二叉树搜索树是个啥:
简而言之就是左子树小于根节点,右子树大于根节点的二叉树

因此在搜索的时候非常方便
1.要找的数X小于根时看左子树
2.要找的数X大于根时看右子树
因此可以通过迭代函数 / 递归实现

#include<stdio.h>
#include<stdlib.h>

typedef struct TreeNode * BinTree;
typedef BinTree Position;
typedef int ElementType;

struct TreeNode{
	ElementType d;
	BinTree Left;
	BinTree Right;
};

搜索的递归代码

Position Find (ElementType x, BinTree BT){
	if(!BT) return NULL;
	if(x > BT->d){
		return Find(x,BT->Right); 
	}
	else if(x < BT->d){
		return Find(x,BT->Left);
	}
	else return BT;
} 

非递归

Position Find (ElementType x, BinTree BT){
	while(BT){
		if(x > BT->d){
			BT = BT->Right;
		}
		else if(x < BT->d){
			BT = BT->Left;
		}
		else return BT;
	}
	return NULL;
}

通过二叉搜索树的特点可以发现
要寻找最小的数就一直往左走
用递归写:

Position FindMin(BinTree BT){
	if(!BT) return NULL;
	if(BT->Left == NULL) return BT;
	else{
		return FindMin(BT->Left);
	}
}

要寻找最大的数就一直向右走
非递归:

Position FindMax(BinTree BT){
	if(BT){
		while(BT->Right){
			BT = BT->Right;
		}
	}
	return BT;
}

下一篇来讲讲插入和删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值