数据结构之树基础知识

对于大量的输入数据,数组结构需要较大的连续内存空间,链表的线性访问时间太慢,存在空间和时间问题,数组和链接表结构不能满足实际业务场景需求。一种简单的新的数据结构产生了,那就是树,大部分操作的运行时间平均为O(logN)

 

树(Tree)是一些节点的集合,树可以为空树,也就是说可以为空集。非空树,是有一个根节点(root简写r)r以及0个或者多个非空子树T_{1},T_{2},...T_{k},组成。一颗真实的树,要有根,然后才有树叶,根和树叶相连就是树枝。

图上就是一个颗树,树的高度为4。树的特性:(高度、深度、度)

1、树有N个节点和N-1条边的集合。一个根节点,图中A是根节点。

2、没有子节点的节点叫树叶。

3、具有相同父节点的节点为兄弟节点。

4、每个节点都有一条到自己本身长度为0的路径。从根节点到每个节点只有条路径。

5、深度是从节点到根的路径长,根本身的深度为0。

6、高度是从节点到树叶的最长路径,所有树叶的高度都是0。一颗树的深度就是根的高度。

7、一个节点子树的个数,称为该节点的度。

树结构的一种实现:儿子兄弟表示法。每个节点除了数据对象之外,还要有指向它儿子的指针(引用)。如果有多个儿子可以把所有儿子放到节点的链表中。

public class SonSiblingTree {

    //第一个儿子
    private String firstChild;
    //下一个兄弟
    private String nextSibling;
    //本节点数据对象
    private String localID;

    //todo
}

树的遍历方法:前序遍历,从根节点开始,在遍历儿子。后序遍历,从儿子节点开始,然后是根节点。

树的结构有:

二叉树:每个节点最多只有左右两个子节点。

二叉查找树:每个节点最多只有左右两个子节点。对于树中的任意节点N,都有它左子树都小于节点N的值;右子树都大于节点N的值。

AVL树:带平衡条件的二叉查找树。每个节点的左子树和右子树的高度相差不能超过1。树的深度平均\O (logN)

伸展树:基本思想是当一个节点被访问时,它要经过一系列的AVL树的旋转操作,被放到根节点上。

B-树:不是二叉树。

二叉树另外一个重要概念:

度,节点没有子树节点,度数为0;节点有一个子树节点,度数为1;节点有两个子树节点,度数为2。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章