树
1.树的定义
树(Tree)的定义:是n(n>=0)个节点的有限集。n=0时称为空树。
在任意一颗非空树中:
(1)有且仅有一个特定的称为根(Root)的节点;
(2)当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1、T2、······、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。
1.1结点分类
结点拥有的子树称为结点的度(Degree)。度为0的叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点(内部节点)。树的度是树内各结点的度的最大值(拥有最多子结点的结点的子结点个数)。
1.2结点关系
结点子树的根称为该结点孩子(Child),相应地,该结点称为孩子的双亲(Parent)。同一个双亲的孩子之间互称兄弟。
1.3结点的层次
结点的层次(Level)从根开始定义起,根为第一层,跟的孩子为第二层。树中结点的最大层次称为书的深度(Depth)或高度。
如果将树的结点各子树堪称从左至右是有序的,不能互换,则称该书为有序树,否则称为无序树。
2.树的存储结构
2.1双亲表示法
一组连续的空间存储树的结点,在每个结点中,附设一个指示器指示器双亲结点在数组中的位置。
2.2孩子表示法
每个结点有多个指针域,其中每个指针指向一棵子树的根结点,即多重链表表示法。
2.3双亲孩子表示法
2.4孩子兄弟表示法
3.二叉树
二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或空集(空二叉树),或者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
3.1二叉树特点
1)每个结点最多有两个子树,二叉树结点度不大于2
2)左子树和右子树是有序的,次数不能颠倒
3)即使树中只有一颗子树,也能区分左右树
3.2二叉树的五种基本形态:
空二叉树、只有一个根结点、根结点只有左子树、根结点只有右子树、根结点有左子树和右子树
3.3特殊二叉树
斜树、满二叉树、完全二叉树
3.4二叉树的性质
1)在二叉树的第i层上至多有2i-1个结点
2)深度为K的二叉树至多有2k-1 (k>=1)
3)对于任何一颗二叉树T,如果其终端结点树为n0,度为2的结点树为n2,则n0=n2+1.
4)具有n个结点的完全二叉树的深度为[log2n]+1([x]表示不大于x的最大整数)
5)如果有n个结点的完全二叉树的结点按层数编号,对任一结点i(1<=i<=n)有:
·i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点[i/2]
·若2i>n,则无左孩子(结点i为叶子节点),否则左孩子为2i
·若2i+1>n,则无右孩子,否则右孩子为2i+1
3.4二叉树的存储结构
二叉链表:一个数据域,左孩子、右孩子指针域
3.5遍历二叉树
二叉树的遍历(travesing binary tree):从根结点出发,按照某种次序依次访问二叉树所有结点,使得每个结点被访问一次且仅被访问一次。
3.5.1前序遍历
先访问根结点,然后前序遍历右子结点,再前序遍历右子树
3.5.2中序遍历
从根结点开始(不先访问),中序遍历根结点的左子树,然后访问根结点,最后中序访问右子树
3.5.3后序遍历
从左到右,先叶子结点后结点的方式遍历左右子树,最后方访问根结点。
3.5.4层序遍历
从上到下,从左到右(每一层)按顺序访问。

浙公网安备 33010602011771号