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. 二叉树的遍历

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

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

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

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

  • 相关阅读:
    【leetcode】1215.Stepping Numbers
    【leetcode】1214.Two Sum BSTs
    【leetcode】1213.Intersection of Three Sorted Arrays
    【leetcode】1210. Minimum Moves to Reach Target with Rotations
    【leetcode】1209. Remove All Adjacent Duplicates in String II
    【leetcode】1208. Get Equal Substrings Within Budget
    【leetcode】1207. Unique Number of Occurrences
    【leetcode】689. Maximum Sum of 3 Non-Overlapping Subarrays
    【leetcode】LCP 3. Programmable Robot
    【leetcode】LCP 1. Guess Numbers
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9424254.html
Copyright © 2011-2022 走看看