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层序遍历

从上到下,从左到右(每一层)按顺序访问。

 

posted @ 2019-06-24 15:35  清月无声  阅读(120)  评论(0)    收藏  举报