zoukankan      html  css  js  c++  java
  • 树和二叉树的基本概念

    一、树的定义

        由一个或多个(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。

  • 相关阅读:
    (HDU)1097 --A hard puzzle(难题)
    (HDU)1096 --A+B for Input-Output Practice (VIII)(输入输出练习(VIII))
    PAT B1008——数组元素循环右移
    test
    vue iconfont矢量图
    css3简单旋转
    vue 路由的安装及使用
    vue 父组件与子组件之间的相互调用
    vue 脚手架安装
    PHP 加密方式
  • 原文地址:https://www.cnblogs.com/LandyTan/p/7836245.html
Copyright © 2011-2022 走看看