树与树的表示
树与树的表示
0x00 什么是树
很多事物存在层次关系比如人类社会家谱关系,社会组织结构,文件目录关系。
为什么使用分层次组织,因为在管理上更高效,比如查找,线性管理的时间复杂度必然是O(n),而二分查找是O(logn),而我们观察二分查找,实际上是一种树状的判定。
查找分为静态查找和动态查找(前者中的记录是固定的,后者还可以做插入删除操作)
二分查找的代码实现:
int binary_search(int*data,int size,int x){
int ret=-1;
int l=0;
int r=size-1;
int mid;
while(r>=l){
mid=(l+r)/2;
if(x>data[mid]){
l=mid+1;
}else if(x<data[mid]){
r=mid-1;
} else{
ret=mid;
break;
}
}
return ret;
}
0x01 树的定义
树的抽象数据结构定义
该定义是递归定义,且需要注意,除根节点外,是互不相交的有限集合。
树的一些基本术语:
0x02 树的表示
1父节点-子节点表示法
该种表示方法,由于子节点的个数不确定,所以难以实现,统一节点个数就容易浪费,不统一又不好表示。
2儿子-兄弟表示法
将该树旋转45°即可得到一颗全新的,度为2的树,即二叉树。