树-知识点结构
一、树的定义:一对多的数据结构。
树的要求:
- 根节点唯一;
- 子树的个数没有限制,但不能相交。
二、结点的分类
- 根结点:最上、终端的结点;
- 内部结点:有上有下的结点;
- 叶结点或终端节点:最下的结点。
度:结点拥有子树的个数称为结点的度
三、结点间关系
- 孩子
- 双亲(非父母)
- 兄弟(同一个双亲的结点为兄弟)
- 子孙(以某节点为根的任意子树中的任一结点都为该结点的子孙)
四、树的其他概念
1.层次(Level)
从根开始定义,根为第一层,同层结点为堂兄弟,根的孩子为第二层。
树中结点的最大层次称为树的深度(Depth)或高度。
2.有序树/无序树
树中各结点的各子树从左到右是有次序的不能互换,则称树为有序树,否则为无序树。
3.森林(Forest)
森林是m(m>=0)棵互不相交的树的集合。
五、树的存储结构
-
双亲表示法
在每个结点中附设一个指示器用来指示其双亲结点在数组中的位置。也就是说每个结点不仅有自己的信息还有其双亲结点在数组中位置的信息。由于根节点没有双亲,所以设置根结点的位置域为-1,即根节点的双亲是-1。
上个方法没有办法很方便的找到结点的孩子,我们可以增加域来标记更多信息,如:左兄弟域,右兄弟域等等。 -
孩子表示法
把每个结点的孩子结点排列起来,用单链表储存,则单链表的n个结点就有n个孩子链表。 -
孩子兄弟表示法
任意一棵树,它的结点的第一个孩子以及第一个孩子的右兄弟若存在即唯一,因此,我们设置两个指针,分别指向该节点的第一个孩子和此节点的右兄弟。data firstchild rightsib
六、二叉树
1.二叉树的特点
- 不存在度大于2的结点。
- 左子树和右子树是有顺序的,次序不能颠倒。
- 即使树中只有一棵树,也要区分是左子树还是右子树。
2.特殊的二叉树
- 斜树
- 左斜树:所有节点都只有左子树的二叉树;
- 右斜树:所有节点都只有右子树的二叉树。
- 满二叉树(特点):
- 叶子只能出现在最下一层;
- 非叶子结点的度一定是2;
- -->在同样深度的二叉树中,满二叉树的节点个数最多,叶子数最多。
- 完全二叉树(特点):
- 叶子结点只能出现在最下两层;
- 最下层的叶子一定集中在左部连续区域;
- 倒数二层,若有叶子一定集中在右部连续位置;
- 若结点的度为1,一定是左孩子;
- 同样结点数的二叉树,完全二叉树的深度最小。
3.二叉树的性质:
- 在二叉树的第二层最多有2^(i+1)个结点。(i>=1)
- 深度为k的二叉树至多有2^k-1个结点。(k>=1)
- 对任何二叉树T,如果其终端节点数为n(0),度为2的结点数为n(2),则n(0)=n(2)+1。
- n个结点的完全二叉树的深度为[log2(n)]-1,[x]表示不大于x的最大整数。
- 对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i有:
- 若 i=1,则结点i是二叉树的根,无双亲;若 i>1,则其双亲是结点[i/2]。
- 若 2i>n,则结点i无左孩子;否则左孩子结点是 2i。
- 若 2i+1>n,则结点i无右孩子;否则右孩子结点是2i+1。
浙公网安备 33010602011771号