数据结构系列(5)树状结构

5树状结构

“树”是有一个或一个以上的节点组成,存在一个特殊的节点,称为树根。每个节点是一些数据和指针组合而成的记录。除了树根,其余节点可分为n>=0个互斥的集合,其中每一个子集合本身也是一种树状结构,即此根节点的子树。此外一棵合法的树,节点间可以互相连接,但不能形成无出口的回路。

5.1 专有名词介绍

  1. 度数:每个节点所有子树的个数。
  2. 层数:树的层数。
  3. 高度:输的最大层数
  4. 树叶或称终端节点:度数为零的节点就是树叶。
  5. 父节点:每一个节点有连接的上一层节点
  6. 子节点:每一个节点有连接的下一层节点。
  7. 祖先和子孙:祖先是指从树根到该节点路径上所包含的节点,而子孙是在该节点往下追溯子树中的任一节点。
  8. 兄弟节点:有共同父节点的节点。
  9. 非终端节点:树叶以外的节点。
  10. 同代:在同一棵中具有相同层数的节点。

5.2 二叉树

二叉树的特性:
1. 层数为i的树,他的节点数最多是 2i1(i>=0) .
2. 度数为k的二叉树总节点数是 2k1 .
3. 对于任何非空二叉树T,如果 n0 为树叶节点数,且度数为2的节点数是 n2 ,则有 n0=n21
4. 高度为k的二叉树,总结点对少为k.

特殊二叉树

完全二叉树:

如果二叉树的高度为h,所含的节点数小于 2h1 ,但其节点的编号方式如同高度为h的满二叉树一样,从左到右,从上到下的顺序一一对应。

严格二叉树:

二叉树中每一个非终端节点均有非空的左右子树。

5.3 二叉树的存储方式

二叉树的存储方式有很多,一般在数据结构的领域中习惯用链表来表示二叉树组织。用一位数组来表示时对树中间节点进行插入删除操作时,需要大量移动来反应节点的变动。

一维数组表式法
使用有序的一维数组来表示二叉树,首先可将此二叉树假想为一棵满二叉树,而且第K层具有2k-1个节点,他们按序存放在这个一维数组中。

链表表式法
由于二叉树最多只能有两个子节点,就是度数小鱼或等于2,而所谓链表表式法,就是利用链表来存储二叉树。就是运用动态分配内存的指针的方式来建立二叉树。
是用链表来表示二叉树的好处是节点的增加和删除操作相当容易,缺点是很难找到父节点,除非每一节点增加一个指向父节点的指针。

5.4二叉树的遍历

前序遍历:
是一种”中左右“的遍历顺序,也就是先从根节点遍历,再往左方移动,当无法继续时,继续向右方移动,接着再重复执行此步骤。
中序遍历:
是左中右的遍历顺序,也就是从树的左侧逐步向下方移动,知道无法移动,在访问此节点,并向右移动一个节点。如果无法再向右移动时,可以返回上层父节点,后右子树。

后序遍历:
后序遍历是左右中的遍历顺序,就是先遍历左子树,在便利右子树,最后遍历根节点,反复执行此步骤。

5.5线索二叉树

二叉树的存储方式,节点存储空间的浪费率可以从2/3降到1/2,对于一棵有n个节点的二叉树,实际上用来指向左右两节点的指针只有n-1个链接,另外的n+1个指针都是空连接。
所谓线索二叉树就是把这些空的链接加以利用,再指到树的其他节点,这些链接就称为线索。

你可能感兴趣的:(数据结构)