参考:https://blog.csdn.net/happyjacob/article/details/82795560
1、什么是二叉排序树
二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树
二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质:
- 非空左子树的所有键值小于其根结点的键值。
- 非空右子树的所有键值大于其根结点的键值。
- 左、右子树都是二叉搜索树。
2、二叉搜索树的查找操作
-
查找从根结点开始,如果树为空,返回NULL
-
若搜索树非空,则根结点关键字和X进行比较,并进行不同处理:
- 若X小于根结点键值,只需在左子树中继续搜索;
- 如果X大于根结点的键值,在右子树中进行继续搜索;
- 若两者比较结果是相等,搜索完成,返回指向此结点的指针。
递归实现
//查找,递归实现
BTNode * SearchBST(BTree pT, ElemType key) {
if (pT == nullptr)
return nullptr;
if (key > pT->val) {
SearchBST(pT->right, key);
}
else if(key < pT->val){
SearchBST(pT->left, key);
}
else {
return pT;
}
}
由于非递归函数的执行效率高,可将“尾递归”函数改为迭代函数
非递归实现
//查找,非递归实现
BTNode * SearchBST(BTree pT, ElemType key) {
while (pT != nullptr) {
if (key < pT->va