zoukankan      html  css  js  c++  java
  • 数据结构之树

    树:非线性结构——————其实更像是一串葡萄,哈哈

      定义:

        专业定义:

          1、有且只有一个成为根节点;

          2、有若干个互不相交的的子树,这些子树本身也是一颗树;

        通俗的定义:

          1、树是由节点和边(指针域)组成;

          2、每个节点只有一个父节点,但可以有很多个子节点;

          3、但有一个节点例外,该节点没有父节点,此节点成为根节点;

       涉及的术语:

        节点, 父节点, 子节点, 子孙, 堂兄弟;

        深度:从根节点到最底层节点的层数称之为深度;

        叶子节点:没有子节点的节点

        非终端节点:实际就是非叶子节点

        度:子节点的个数;

        树的度:子节点的个数数目中最大值;

      树分类:

        一般树:任意一个子节点的个数的都不受限制;

        二叉树;任意一个节点的字节点的个数最多两个,且子节点的位置不可改变;

           一般二叉树

           满二叉树:在不增加树层数的前提下,无法再多添加一个节点的二叉树;

           完全二叉树(重点):如果只是删除了满二叉树最底层右边连续若干个节点。这样形成的二叉树;

         森林:n个互不相交的树的集合;

    树的存储:

      二叉树的存储(重点):(一般二叉树转成完全二叉树来存储?原因是树是非线性的,而我们要线性的保存它,所以要将非线性转成线性来存储)

        连续存储【完全二叉树】:

          优点:查找某个节点的父节点和子节点(包括查找某个节点有没有子节点)

          缺点:耗用内存空间过大;

        链式存储:

          (每个节点分三块)

      一般树的存储:

        双亲表示法,孩子表示法,双亲孩子表示法,

        二叉树表示法:

          把一个普通树转化成二叉树来储存,具体转换方法:设法保证任意一个节点的左指针域指向它的第一个孩子,右指针域指向它的兄弟;

          通过此办法,就可以将一颗树转化为二叉树;

    ·      一个普通树转化成的二叉树一定没有右子树;

           如下图所示:

              

      森林的存储:

        转化为二叉树储存;规则如同普通树转化成二叉树一致;(每棵树根节点为兄弟节点)

        如下图所示:

        

     霍夫曼树:每个节点要么没有子节点,要么有两个子节点;

  • 相关阅读:
    JMeter接口测试系列:Jmeter+jenkins+ant 的自动化构建
    BZOJ1434:[ZJOI2009]染色游戏(博弈论)
    BZOJ4241:历史研究(回滚莫队)
    BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)
    BZOJ1188:[HNOI2007]分裂游戏(博弈论)
    BZOJ1022:[SHOI2008]小约翰的游戏John(博弈论)
    BZOJ1406:[AHOI2007]密码箱(数论)
    BZOJ3270:博物馆(高斯消元)
    CF993E:Nikita and Order Statistics(FFT)
    HDU4609:3-idiots(FFT)
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4055513.html
Copyright © 2011-2022 走看看