本文参考链接:https://github.com/qiwsir/algorithm/blob/master/binary_tree.md
这里介绍一下一种特殊的二叉树,从定义,构建以及基本的操作来介绍。
二叉排序树(Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:
- 如果它的左子树不空,那么左子树上的所有节点的值都小于它的根节点的值;
- 如果它的右子树不空,那么右子树上的所有节点的值都大于它的根节点的值;
- 它的左右子树也分别是二叉排序树。
- 没有键值相等的结点。
二叉排序树又叫做二叉查找树,它的查找过程和次优二叉树类似。也就是当二叉排序树不为空的时候,把给定的关键词先和根节点的值作比较,如果小于根节点的值,就再和左孩子的值进行比较;反之,则和右孩子的值进行比较,这样循环往复,直到查找成功。
接下来先构建一棵二叉排序树,有图作参考(图片来自网络):
python实现这个算法。
上面代码亲测可用,记下遇到坑。首先就是接收键盘输入部分的代码应该放在外面,class Node中就是有关node的所有操作,为什么要抽象出类,就是尽可能的把可能重复的内容集中到一起。‘
下一个坑就是缩进格式的问题,python中的格式是一个很重要的点,缩进格式可能会导致一些灾难。
还有一个就是range()函数,range()函数的前两个参数是起始位置和最终位置,比如在这个例子中,如果是
这样的结果就是:
结果是丢掉了8,所以修改之后,结果就正确了:
接下来继续研究怎样去删除二叉排序树的节点,这是一个比较复杂的工作,先看代码:
这样写的结果就是可以检测到要删除选项的输入,但是不能成功的调用lookup()函数,这和lookup()函数有关系,明天再继续的研究下。