二叉搜索树
2015-07-23 20:49
197 查看
二叉搜索树
定义:
二叉搜索树是一棵二叉树来组织的。二叉搜索中的关键字总是以满足二叉树搜索性质的方式来存储的。
设x 是二叉树中的一个节点。如果y是x 左子树中的一个结点,那么 y.key <= x.key。
如果y是x 右子树中的一个结点,那么 y.key >= x.key。
算法的分析:
假如我们选择中序遍历整个二叉树。 例如
6
5 7
2 5 8
这样一个二叉树,(中间的线自己想象)。
INORDER-TREE―WALK
1 if x != NULL
2 INORDER-TREE-WALK(x, left)
3 print x.key;
4 INORDER-TREE-WALK(x, right)
很简单我们可以得到树的中序遍历结果: 2 5 5 6 7 8
遍历一棵具有N个结点的二叉搜索树需要消耗的时间是:Θ(n)
证明:
用 T(n)表示需要的时间,由于 中序需要访问这棵树的全部n各节点,所以有T(n)=Ω(n),下面只要证明T(n) = O(n).
对于一棵空树, 需要消耗很小的常数时间c,对于某个常数,c>0;有T(0) = c;
n > 0 , 假如x 的左子树上 有 k个结点,那么右子树上有 n - k -1;
对于T(n) 有 T(n) <= T(k) + T(n-k-1) +d; d >0;
使用替换法: T(n) <= (c+d)n +c; 可以得出T(n) = O(n);
定义:
二叉搜索树是一棵二叉树来组织的。二叉搜索中的关键字总是以满足二叉树搜索性质的方式来存储的。
设x 是二叉树中的一个节点。如果y是x 左子树中的一个结点,那么 y.key <= x.key。
如果y是x 右子树中的一个结点,那么 y.key >= x.key。
算法的分析:
假如我们选择中序遍历整个二叉树。 例如
6
5 7
2 5 8
这样一个二叉树,(中间的线自己想象)。
INORDER-TREE―WALK
1 if x != NULL
2 INORDER-TREE-WALK(x, left)
3 print x.key;
4 INORDER-TREE-WALK(x, right)
很简单我们可以得到树的中序遍历结果: 2 5 5 6 7 8
遍历一棵具有N个结点的二叉搜索树需要消耗的时间是:Θ(n)
证明:
用 T(n)表示需要的时间,由于 中序需要访问这棵树的全部n各节点,所以有T(n)=Ω(n),下面只要证明T(n) = O(n).
对于一棵空树, 需要消耗很小的常数时间c,对于某个常数,c>0;有T(0) = c;
n > 0 , 假如x 的左子树上 有 k个结点,那么右子树上有 n - k -1;
对于T(n) 有 T(n) <= T(k) + T(n-k-1) +d; d >0;
使用替换法: T(n) <= (c+d)n +c; 可以得出T(n) = O(n);
相关文章推荐
- flash_erase擦除NAND flash坏块失败
- 数组名与指针的区别【转】
- 链表初始化为什么要用双重指针
- 关于CUFFT
- 融云即时聊天,IM
- 2015 HUAS Summer Training#2~E
- 每天一个小知识点11(jQuerMobile总结二)
- 《编译原理》学习心得
- Thinking in Java 笔记(第四章 初始化和清除)
- Java的运行原理
- Android 监听器
- animateWithDuration动画效果
- android在指定区域监听滑动事件
- jQuery源码框架思路
- Programming Concepts
- hdu 5305 回溯+剪枝
- 毕业之后实习公司的选择
- 微信公众平台开发时需要判断微信浏览器访问
- 虚幻4如何通过C++创建UObject或者UClass
- Scala入门到精通——第八节 包和引入