目录
二叉搜索树概念及特点
1.特点
二叉搜索树又称二叉排序树,它可能是一棵空树,或者是具有以下性质的二叉树:
- 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
- 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
- 它的左右子树也分别为二叉搜索树
一般我们所说的二叉搜索树是指:满足 根总是 大于左子树小于右子树 的二叉树。
举例:
二叉搜索树的中序遍历结果为有序序列。
二叉搜索树的简单操作
1.查找操作
查找时间复杂度:普通二叉树: O(N)
二叉搜索树: log(N) 趋近于常数时间复杂度
//查找
pNode find(const T& value)
{
pNode cur = _root;
while (cur)
{
if (cur->_value == value)
return cur;
else if (cur->_value >value)
cur = cur->_left;
else
cur = cur->_right
}
return cur;
}
2.插入操作
这里注意二叉搜索树一般不能有相同元素值结点,所以插入时一般不能插入相同的结点
- 新插入的结点一般在叶子。
- 新节点插入后不能破坏二叉搜索树的结构。
- 插入操作过程情况:
- a.首先判断要插入的元素是否已经存在;
- b.如果存在,插入失败,返回false ; 如果不存在:判断是否为空树:空树直接插入,返回true,非空树查找要插入的位置;
- c.根据b结束后提供位置进行插入链接。
二叉搜索树插入操作的时间复杂度为:O(logN),主要是因为要查找要插入的位置。
<