二叉搜索树也叫二叉排序树,是直接在树上面进行排序。
1、什么是二叉搜索树(二叉排序树)
我们直接看它的性质:
若它的左子树不为空,则左子树上所有结点的值都小于它根节点的值。
若它的右子树不为空,则右子树上所有结点的值都大于它根节点的值。
它的左右子树又各自为二叉排序树。
显然,二叉搜索树与二叉树一样,也是通过递归定义的,因此,它的操作也是基于递归的方式处理的。
2、构建二叉搜索树
首先,假设我们有一下数据:8 3 10 1 6 14 4 7 13
首先,将8作为根节点
插入3,由于3小于8,作为8的左子树
插入10,由于10大于8,作为8的右子树
插入1,由于1小于8,进入左子树3,1又小于3,则1为3的左子树
插入6,由于6小于8,进入左子树3,6又大于3,则6为3的右子树
插入14,由于14大于8,进入右子树10,14又大于10,则14为10的右子树
插入4,由于4小于8,进入左子树3,4又大于3,进入右子树6,4还小于6,则4为6的左子树
插入7,由于7小于8,进入左子树3,7又大于3,进入右子树6,7还大于于6,则7为6的右子树
插入13,由于13大于8,进入右子树10,又13大于10,进入右子树14,13小于14,则13为14的左子树
最终结果如下:
由此可以看出:
如果左子树为空,就将小于根结点的值放入左子树。
如果右子树为空,就将大于根节点的值放入右子树。
如果不为空,就一直向下搜索,直到搜索到空结点。
这里问题就来了:那么如果key = 根节点的值呢? 这个问题是不考虑的,如名字所说,二叉搜索树,是在该树中搜索是否有某一个值,那么只要有一个存在即可,不需要重复出现。
实现代码如下: