zoukankan      html  css  js  c++  java
  • 数据结构:树和二叉树

    一、树的定义和基本术语

    • 把数据元素称为结点
    • 树是n(n>=0)个结点的有限集合。n=0时称为空树。
    • 有且仅有一个根节点。n>1时,除了根结点之外的其余结点被分成m棵互不相交的子树。
    • 结点的度:某结点拥有的子树的个数。
    • 树的度:每个结点的度的最大值

    树的存储结构

    双亲表示法

    用一维数组来存储这棵树。每个结点元素存了自己的数据信息和双亲结点的下标。

    孩子表示法

    是一种基于链表的存储方法。有:

    1. 多重链表表示法
      就是一个节点元素有一个数据域,存自己的信息;还有好几个指针域,指向他们的孩子
    2. 孩子链表表示法
      每个结点的孩子们给弄成一个链表,n个结点就有n个链表。这个是孩子链表。
      然后还有表头,就是那n个结点。表头有数据域和firstchild指针指向第一个结点

    双亲孩子表示法

    将孩子链表表示法和双亲孩子表示法相结合。在孩子链表表示法的基础上,再增添一个数据元素用来存储双亲的下标。

    孩子兄弟表示法

    一个结点中,一个数据域,一个指针域存第一个孩子,一个指针域存右兄弟。

    二叉树的逻辑结构

    1.定义

    • 二叉树的每个结点最多有两棵子树
    • 二叉树是有序的
    • 满二叉树:叶子(度为0)只能出现在最下一层、只有度为0和度为2的结点
    • 完全二叉树:叶子结点只能出现在最下两层、最下层的叶子结点都集中在二叉树的左侧;如果有度为1的结点,只能有一个,且该结点只有左孩子。(请查找一个图来看)

    2.二叉树的基本性质

    1. 二叉树的第i层上最多有2
    ^i-1 个结点(1,2,4,8...)

    2. 在一棵深度为k的二叉树中,最多有2^k -1 个结点,最少有k个结点。(1+2+4+8...)
    3. 在一棵二叉树中,如果叶子结点的个数为n0,度为2的结点个数为n2,则:n0 = n2 + 1
    4. 具有n个结点的完全二叉树的深度为log2 n (向下取整) + 1
    5. 对一棵具有n个结点的完全二叉树中的结点,从1开始按层序编号,则对于任意编号i(1<=i<=n)的结点,有:
    如果结点i有左孩子,左孩子为2i;如果结点i有右孩子,右孩子为2i+1;如果结点i有双亲,那么双亲编号为i/2(向下取整)。

    3.二叉树的遍历操作

    前序、中序、后序、层序

    二叉树的存储结构及实现

    1.顺序存储结构。

    把二叉树当成一颗完全二叉树来编号,这样可以从下反映出父子关系。但是这样浪费空间。

    2.二叉链表

    一个结点中,有一个数据域,一个指针域指向左孩子,一个指针域指向右孩子。

    template<class D>
    struct BiNode
    {
        D data;//数据
        BiNode<D> *lchild,*rchild;
    };
    
  • 相关阅读:
    Java8 lambda表达式语法 1
    Spring WebMVC 4.1返回json时 406(Not Acceptable)
    上传 第三方jar包 nexus
    Nexus 使用配置
    Nexus 安装 使用说明
    mysql 常用命令
    JedisPoolConfig配置
    tomcat 管理端 安全措施
    Java ReentrantLock和synchronized两种锁定机制的对比
    spring 在web容器启动时执行初始化方法
  • 原文地址:https://www.cnblogs.com/juzijuziju/p/11880305.html
Copyright © 2011-2022 走看看