二叉搜索树的搜索【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;
}
下一篇来讲讲插入和删除