七、二叉排序树--(1)什么是二叉排序树
2016-05-16 23:30
197 查看
摘自计蒜客:http://www.jisuanke.com/course/35/1423
二叉排序树(Binary
Search Tree)。二叉排序树又称为二叉查找树,二叉搜索树。二叉排序树和普通的二叉树在结构上一样,它要么是一棵空树,要么是这样的一棵二叉树:对任意结点,如果左子树不为空,则左子树上所有结点的权值都小于该结点的权值;如果右子树不为空,则右子树上所有结点的权值都大于该结点的权值;任意结点的左子树和右子树都是一棵二叉排序树;一般而言, 二叉排序树上结点的权值都是唯一的。
在二叉排序树上,对于任意结点,如果有左子树和右子树,那么其左子树上结点的权值都小于右子树上结点的权值。如果中序遍历二叉排序树,会得到一个从小到大的序列。二叉排序树的插入和查找效率相对较高,最坏情况下时间复杂度为 O(n),期望的时间复杂度为 O(logn),其中 n 为树上结点总个数。
二叉排序树最坏情况下时间复杂度为
O(n),这是为什么呢?最坏情况下,二叉排序树会退化成链表,从根结点往左依次递减,或者从根结点往右依次递增。那有什么方法可以解决这个问题呢?在二叉排序树的基础上可以加些优化,可以让其成为 AVL 树,红黑树,SBT,Splay 等等,这些高级的树结构解决了上面的问题,插入和查找的效率均为 O(logn)。
二叉排序树(Binary
Search Tree)。二叉排序树又称为二叉查找树,二叉搜索树。二叉排序树和普通的二叉树在结构上一样,它要么是一棵空树,要么是这样的一棵二叉树:对任意结点,如果左子树不为空,则左子树上所有结点的权值都小于该结点的权值;如果右子树不为空,则右子树上所有结点的权值都大于该结点的权值;任意结点的左子树和右子树都是一棵二叉排序树;一般而言, 二叉排序树上结点的权值都是唯一的。
在二叉排序树上,对于任意结点,如果有左子树和右子树,那么其左子树上结点的权值都小于右子树上结点的权值。如果中序遍历二叉排序树,会得到一个从小到大的序列。二叉排序树的插入和查找效率相对较高,最坏情况下时间复杂度为 O(n),期望的时间复杂度为 O(logn),其中 n 为树上结点总个数。
二叉排序树最坏情况下时间复杂度为
O(n),这是为什么呢?最坏情况下,二叉排序树会退化成链表,从根结点往左依次递减,或者从根结点往右依次递增。那有什么方法可以解决这个问题呢?在二叉排序树的基础上可以加些优化,可以让其成为 AVL 树,红黑树,SBT,Splay 等等,这些高级的树结构解决了上面的问题,插入和查找的效率均为 O(logn)。
相关文章推荐
- java正则匹配及替换的一点思考
- PHP IDE phpstorm 常用快捷键
- 电脑默认F1F2F3F4F5F6功能不管用,必须要按Fn这个键,怎么不按?直接按f1-f12
- 程序员都应该懂点心理学
- EntityFramework Code-First 简易教程(五)-------领域类配置
- C 和 C++ 一些基础
- 3月7日作业
- POJ 3237 Tree 树链剖分(路径剖分
- HYSBZ - 2152 聪聪和可可
- 3月9日作业
- HYSBZ - 2152
- 《Wireshark 网络分析就这么简单》学习笔记
- 【转】JSONP跨域的原理解析
- 坑爹的ubuntu /bin/sh
- 数据库命令大全
- 2016"百度之星"-资格赛
- jQuery基础教程-第8章-004完整代码
- 客户端调用axis2服务端时报的错:Deserializing parameter 'getPersonReturn': could not find deserializer for type {
- 利用 autoconf 和 automake 自动生成Makefile
- 简单的html