zoukankan      html  css  js  c++  java
  • 二叉树与树的理解

    • 二叉树性质及结论的证明,天然地依赖于递归,而涉及到递归时,一般采用的证明方法为:数学归纳法

    1. 树形结构 vs 线性结构

    树形结构是复杂数据结构中最为简单的一类结构;

    • 树形结构不但本身很有用,还反映了许多计算过程的抽象结构;
    • 树形结构的结点形成一种层次结构;

    树和链表、队列、栈等结构一样,也是一些基本元素的汇集,单元素之间不是简单的线性关系(在一个包含 n 个元素的数据结构里),可能存在更为复杂的联系。这种情况下,在一个包含 n 个元素的数据结构里,元素之间的最远距离就不是 n,可能小得多。

    树形结构也是由结点(结构中的逻辑单元,可用于保存数据)和结点之间的连接关系(一种后继关系)构成,但其结构与线性结构(表)不同,最重要的特征包括:

    • 一个结构如果不空,其中就存在着唯一的一个起始节点,成为树根(root)

    • 按结构的连接关系,树根外的其余结点都有且只有一个前驱(这点与线性结构一样),但另一方面,一个结点可以有 0 个或者多个后继(与线性结构不同)。另外,在非空的树结构中一定有些结点并不连接到其他结点。这种结点与表的尾节点性质类似,但在一个树结构里可以存在多个这种节点

    • 结构里的所有结点都在树根结点通过后继关系可达的结点集合里。换句话说说,从树根节点出发,经过若干次后继关系可以到达结构中的任一个结点;

    • 结点之间的联系不会形成循环关系,这也就说明,结点之间的联系形成了一种序,但一般而言不像线性表那样形成一个全序;

    • 从这种结构里的任意两个不同结点出发,通过后继关系可达的两个结点集合,或者互不相交,或者一个集合是另一个集合的子集;

    2. 二叉树:概念及性质

    • 一个结点的关联结点数可以为 0、1 和 2;
    • 一个二叉树可以有五种形态,
      • 空二叉树
      • 单点树(只包含一个结点,也即根节点)
      • 根节点和左子树
      • 根节点和右子树
      • 根节点+左子树+右子树

    当然也可以这样理解,根节点、左子树、右子树,三方面的内容,每个有两种状态,有或者无,共两种,因此 23=8,但要排除:

    • 只有左子树;
    • 只有右子树;
    • 有左子树,右子树,但没有根;

    8 - 3 = 5,

    2.1 性质:非空二叉树第 i 层中至多有 2i 个结点(i0

    数学归纳法进行证明,i2ii+12i2=2i+1

    2.2 性质:高度为 h(从 0 开始算起)的二叉树至多有 2h+11 个结点

    20+21++2h=2h+1121

    2.3 性质:非空二叉树 T,如果其叶节点的个数为 n0(度为 0),度数为 2 的结点个数为 n2,那么 n0=n2+1

    可以根据二叉树的 5 种不同形态,通过数学归纳法进行证明,由于条件中说了非空,那么只需考虑后续的 4 种形态。设 T 是二叉树,L(T) 表示 T 中叶节点的个数,B(T) 表示 T 中度数为 2 的结点的个数。

    显然对于单点二叉树,结论是成立的;

    归纳 1:如果二叉树 T包含根节点 r 且只有左子树 T1,根据归纳假设,L(T1)=B(T1)+1,又整个二叉树

    归纳 2:如果原二叉树 T 包含根节点 r 和非空左右子树 T1,T2,由归纳假设:

    L(T1)=B(T1)+1L(T2)=B(T2)+1

    又对整颗二叉树而言,L(T)=L(T1)+L(T2)B(T)=B(T1)+B(T2)+1

    所以:

    L(T)=B(T)+1

    3. 二叉树的遍历

    每棵二叉树有唯一的根节点,可以将其看作这棵二叉树的唯一标识(根之于二叉树,好比主键之于一条记录),是基于树结构的处理过程的入口(状态空间的初始状态)。也即从根节点出发,能找到树中所有信息,其基础是从父节点找到两个子节点。

    因此,实际中常用二叉树的根节点代表这棵二叉树,其左右子树由它们各自的根节点代表。

    • 二叉树 根 ⇒ (左子树,右子树)

    二叉树的每个结点可能保存一些数据,因此也是一种汇集型的数据结构。

  • 相关阅读:
    20150226 IMX257 总线设备驱动模型编程之驱动篇
    20150226 IMX257 总线设备驱动模型编程之设备篇
    20150226 IMX257 总线设备驱动模型编程之总线篇(二)
    python 打印9*9乘法表
    redis设置最大内存上限对置换策略的解读
    redis3.0.6版本的info信息解读
    web访问流程
    WEB请求流程
    linux下mysql-5.6忘记root密码,重置root密码详细过程
    tomcat7+jdk1.8一键安装脚本
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9424254.html
Copyright © 2011-2022 走看看