• 树和二叉树的基本概念


    一、树的定义

        由一个或多个(n≥0)结点组成的有限集合T,有且仅有一个结点称为根(root),当n>1时,其余的结点分为m(m≥0)个互不相交的有限集合T^1, T^2,....,T^m。每个集合本身又是一颗树,被称为这个根的子树。

    注1:过去许多书籍中都定义树为n>1,曾经有“空树不是树”的说法,但现在树的定义已修改。

    注2:树的定义具有递归性,即树中有树

    二、树的术语

    根————即根结点(没有前驱)

    叶子———即终端结点(没有后继)

    森林———指m棵不相交的树的集合(例如删除A后的子树个数)

    有序树——结点各子树从左至右有序排列,不能互换(左为第一)

    无序树——结点各子树可互换位置

    双亲———即上层的哪个结点(直接前驱)Parent

    孩子———即下层结点的子树(直接后继)Child

    兄弟———同一双亲下的同层结点(孩子之间互称兄弟)Sibling

    堂兄弟——即双亲位于同一层的结点(但并非同一双亲)Cousin

    祖先———即从根到该结点所经分支的所有结点

    子孙———即该结点下层树中的任一结点

    结点———即树的数据元素

    结点的度—结点挂接的子树数(有几个直接后继就有几度,或称“次数”)

    结点的层次——从根到该结点的层数(根结点算第一层)

    终端结点—即度为0的结点,即叶子

    分支结点—除树根以外的结点(也称为内部结点)

    树的度——所有结点度中的最大值(Max{各结点的度})

    树的深度—指所有结点中最大的层数(Max{各结点的层次})或高度

    3、树的表示法(百度查资料)

    1、图形表示法

    2、嵌套集合表示法

    3、广义表表示法

    4、目录表示法

    5、左孩子-右孩子表示法(二叉树)

    4、树的逻辑结构

    树的特点是1对多(1:n),有多个直接后继(如家谱树、目录树等),但只有一个根结点,且子树之间互不相交。

    5、树的存储结构

    树虽是非线性结构,但仍然有顺序存储、链式存储等方式。

    讨论1:树的顺序存储方案应该怎样制定?

    可规定为:从上至下、从左至右将树的结点依次存入内存。

    重大缺陷:复原困难

    讨论2:树的链式存储方案应该怎样知道?

    可用多重链表:一个直接前驱、n个直接后继指针。

    细节问题:树中结点 的结构类型样式该如何设计?即应该设计成“等长”还是“不等长”?

    缺点:等长结构太浪费(每个结点的度不一定相同);

      不等长结构太复制(要定义多种结构类型)

    (使用链表存储后继结点,或改为二叉树)

    6、树的运算

    要明确:

    1、普通树(即多叉树)若不转化为二叉树,则运算很难实现。

    2、二叉树的运算仍然是插入、删除、修改、查找、排序等,但这些操作都必须建立在对树结点能够“遍历”的基础上。

    (遍历——指每个结点都被访问且仅访问一次,不遗漏不重复)

    7、二叉树

    二叉树的结构最简单,规律性最强;

    可以证明,所有的树都能转化为唯一对应的二叉树,不失一般性。

    8、二叉树的定义

    定义:n(n≥0)个结点的有限集合,由一个根节点以及两颗互不相交的、分别称为左子树和右子树的二叉树组成。

    逻辑结构:一对二(1:2)

    基本特征:

    1、每个结点最多只有两颗子树(不存在度>2的结点)。

    2、左子树和右子树次序不能颠倒(有序树)。

    9、二叉树的性质

    1、在二叉树的第i层上至多有2^(i-1)个结点(i>0)。

    2、深度为k的二叉树至多有(2^k)-1个结点(k>0)。

    3、满二叉树:一颗深度为k且有(2^k)-1个结点的二叉树。(特点:,每层都“充满”了结点)

    4、完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应。(特点:只有最后一层叶子不满,且全部集中在左边),这其实是顺序二叉树的含义。

    5、满二叉树与完全二叉树在顺序存储方式下可以复原。

    6、对完全二叉树,若从上至下,从左至右编号,则编号为i的结点,其左子树编号必为2i,其右子树编号必为2i+1,其双亲的编号必为i/2(i=1时为根,除外)。

    对于第k层中的编号为i的元素,在第k层中前面有x=i-2^(k-1)个元素,在第k层中后面有y=2^(k-1)-1-x个元素,则其左孩子编号为:

    i+y+2x+i=i+2^(l-1)-1-x=2x+1=i+2^(k-1)+x=i+2^(k-1)+i-2^(k-1)-2i

    则其右孩子编号为:

    i+y+2x+2=2i+1

    对于左右孩子,其双亲结点编号必然为i/2。

  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/LandyTan/p/7836245.html
Copyright © 2020-2023  润新知