< 今日知识点 >
- 引子:二分查找
- 树
·
·
·
—01 二分查找
方法2:二分查找
代码实现:
int BinarySearch(List Tbl,ElementType K)
{
int left,right,mid;
int notFound = -1;
left = 1;
right = Tbl->length;
while (left <= right)
{
mid = (left+right) / 2;
if(K < Tbl->Element[mid])
right = mid -1;
else if( K > Tbl->Element[mid] )
left = mid +1;
else return mid; //查找成功,返回数据元素的下标
}
return notFound; //查找不成功,返回-1
}
- 二分查找算法具有对数的时间复杂度O(logN)
例子:十一个元素的二分查找判定树
总结:
- 判定树上每个节点需要的查找次数刚好为该节点所在的层数
- 查找成功时查找次数不会超过判定树的深度
- n个节点的判定树深度为 [ log2 N ] +1
- 平均查找次数ASL = (44+43+2*2+1) / 11 = 3
·
·
·
·
—02 树
1、树的定义
- 树与非树
- 子树是不相交的
- 除了根节点以外,每个节点有且仅有一个父节点
- 一棵N个节点的树有N-1条边
·
·
- 树的一些基本术语
1、节点的度:节点的子树个数
2、树的度:树的所有节点中最大的度数
3、叶节点:度为0的节点
4、父节点:有子树的节点是其子树的根节点的父节点
5、子节点:若A节点是B节点的父节点,则称B节点是A节点的子节点;子节点也称孩子节点
6、兄弟节点:具有同一父节点的各节点是彼此兄弟节点
7、路径和路径长度:从节点n1到节点nk的路径为一个节点序列n1、n2、…、nk。路径所包含边的个数为路径的长度
8、祖先节点:沿着树根到某一节点路径上的所有节点都是这个节点的祖先节点
9、子孙节点:某一节点的子树中的所有节点是这个节点的子孙
10、节点的层次:规定根节点在1层,其他任一节点的层次是其父节点的层数加1.
11、树的深度:书中所有节点中的最大层次是这棵树的深度。
·
·
·
附:文中所有PPT图片均来自中国大学mooc 浙江大学《数据结构》课程!!