“折半查找”这个词相信大家在学习C语言的时候已经很熟悉,由于数组中数字的排列是有序的,那么我们就可以将要查找的数字与最中间的数进行比较,每次比较都可以把范围缩小一半,依次下去,很好的提高了查找效率。而在数据结构中,我们也有处理这种问题的对应模型------二叉搜索树(也称为二叉排序树)。
二叉搜索树的性质:
(1)每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同
(2)左子树上所有节点的关键码(key)都小于根节点的关键码(key)
(3)右子树上所有节点的关键码(key)都大于根节点的关键码(key)
(4)左右子树都是二叉搜索树
以下面这颗树为例:
二叉搜索树节点的定义:
struct SearchBinaryTreeNode
{
SearchBinaryTreeNode<K>* _left;
SearchBinaryTreeNode<K>* _right;
K _key;
//节点的初始化
SearchBinaryTreeNode(const K&k)
:_left(NULL)
, _right(NULL)
, _key(k)
{}
};
插入:
这里说一下插入的思路:分两种情况讨论---
(1)如果本来就是一颗空树,则直接插入
(2)树不为空,则将待插元素与根节点的值进行比较,若大于根节点则移向右子树,再与右子树的根节点进行比较,依次下去,直到找到合适的插入位置。。。小于根节点同理
还是直接上图帮助理解:(就是上面那棵树,插入12)