赞
踩
树的结构: 每个结点(除根结点)都有且仅有一个直接前趋,所有结点有且仅有零个或多个直接后继。
树的特点:
结点(node):表示树中的元素,包括数据项及若干指向其子树的分支。
结点的度(degree):结点拥有的子树个数。
树的度:数中结点的度的最大值。
叶子(leaf):度为0的结点。
孩子(child): 结点的子树称为该结点的孩子。
双亲(parents): 孩子结点的上层结点叫该结点的双亲。
兄弟(sibling): 同一双亲的孩子。
结点的层次(level): 从根结点算起,根为第一层,它的孩子结点为第二层……。
结点的深度: 从根开始向下累加。
结点的高度: 从叶结点向上累加。
树的深度/高度(depth): 树中结点的最大层次数。
森林(forest): m棵(m>=0)互不相交的树的集合
有序树:树中结点的子树从左往右是有序且不可互换的。
无序树:不是有序树那就是无序树。
一般定义:二叉树是n(n>=0)个结点的有限集合,由一个根结点和两棵称为左子树和右子树的互不相交的二叉树构成。
满二叉树:二叉树的所有结点都存在左子树和右子树,并且所有叶子结点都在同一层上。
完全二叉树:二叉树的每个结点都与满二叉树中结点的编号对应,且深度为k的完全二叉树在k-1层上一定是满二叉树。
注意,完全二叉树是由满二叉树推导而出的,其有两大特点:
- 叶子结点必然只会出现在层次最大的两层。
- 对任意结点,若其左分支深度为l,那么其左分支必定是l或l+1.
二叉树的形态:仅有根结点、根和左子树、跟和右子树、空树(n=0)。
顺序存储的定义:以数组的方式用一组连续地址从上到下,从左到右的依次存放结点元素。以0代替没有的结点。
元素的访问方式参考二叉树的性质部分。
注意:
由于是以0代替没有的结点,所以对于一般二叉树、左分支、右分支而言会造成浪费,只适合存放完全二叉树或满二叉树。
抽象数据描述:略。
二叉链表:含有两个指针域,其形式为:
lchild | data | rchild |
---|
三叉链表:含有三个指针域,其形式为:
lchild | data | parent | rchild |
---|
抽象数据描述:略。
遍历方式:
遍历算法描述:
先序遍历递归算法。
略
先序遍历非递归算法。
略
中序遍历递归算法。
略
中序遍历非递归算法。
略
后序遍历递归算法。
略
后序遍历非递归算法。
略
根据遍历序列恢复二叉树:
什么是线索二叉树:线索二叉树能在一次遍历后记忆某结点的前驱或者后继。
结构:
ltag | lchild | data | rchild | rtag |
---|
l/rtag:0 指向结点的左/右孩子。1 指向结点的前驱/后继结点。
线索二叉树的算法描述:
略
优势:便于查找双亲结点,结构简单,便于操作。
劣势:求孩子结点需遍历整棵树。
优势:便于查找孩子结点
劣势:找双亲结点很复杂
双亲孩子表示法:树的结点由双亲位置、数据和孩子结点位置构成;
优点:便于查找双亲结点和孩子结点;
劣势:存储密度小,空间开销大。
孩子兄弟表示法(左孩子-右兄弟):firstchild data nextsibling
把森林中第二棵树的根结点看成是第一棵树的根结点的兄弟,就可以推导出森林和二叉树的对应关系。
二叉树的路径长度:由根结点到所有叶子结点的路径长度之和。
二叉树的带权路径长度:从根结点到各个叶子结点的路径长度与相应结点权值的乘积之和。
赫夫曼(Huffman)树:也称最优二叉树,是指对于一组带有确定权值的叶子结点,构造的具有最小带权路径长度的二叉树。
在赫夫曼编码树的带权路径长度就是电文的代码总长,所以采用赫夫曼树构造的编码是一种能使电文代码总长最短的不等长编码。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。