• 树与二叉树


    树与二叉树的特性:

    (1)树的概念:

    双亲、孩子和兄弟:结点的子树的根称为该结点的孩子;相应地,该结点称为其子结点的双亲。具有相同双亲的结点互为兄弟

    结点的度:一个结点的子树的个数记为该结点的度

    叶子节点:也称为终端结点,指度为0的结点

    内部结点:指度不为0的结点称为分支节点或非终端节点。除根结点之外,分支结点也称为内部结点

    结点的层次:根为第一层,根的孩子为第二层,依次类推,若某节点在第i层,则其孩子结点在第i+1层

    树的高度:一颗树的最大层次数记为树的高度(深度)

    (2)二叉树的重要特性:

    1、在二叉树的第i层上最多有2i-1个结点(i≥1);

    2、深度为k的二叉树最多有2k -1个结点(k≥1);

    3、对任何一棵二叉树,如果其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1。

    4、如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到

    L log2n˩+1层,每层从左到右),则对任一结点i(1≤i≤n),有:

    如果i=1,则结点i无父结点,是二叉树的根;如果i>1,则父结点是L i/2 ˩;

    如果2i>n,则结点i为叶子结点,无左子结点;否则,其左子结点是结点2i;

    如果2i+1>n,则结点i无右子叶点,否则,其右子结点是结点2i+1。

    特殊的树

    二叉树:二叉树是每个结点最多有两个孩子的有序数,可以为空树,可以只有一个结点。

    满二叉树:任何结点,或者是树叶,或者恰有两棵非空子树。

    完全二叉树:最多只有最小面的两层结点的度可以小于2,并且最下面一层的结点全都集中在该层左侧的若干位置。

    平衡二叉树:树中任一结点的左右子树高度之差不超过1。

    查找二叉树:又称之为排序二叉树。任一结点的权值,大于其左孩子结点,小于其右孩子结点。

    线索二叉树:在每个结点中增加两个指针域来存放遍历时得到的前驱和后继信息。

    最优二叉树:又称为哈弗曼树,它是一类带权路径长度最短的树。

    路径是从树中一个结点到另一个结点之间的通路,路径上的分支数目称为路径长度。

    树的路径长度是从树根到每一个叶子之间的路径长度之和。结点的带权路径长度为从该结点到树根之间的路径长度与该结点权值的乘积。

    树的带权路径长度为树中所有叶子结点的带权路径长度之和。

    哈弗曼树的构造:

    (1)根据给定的权值集合,找出最小的两个权值,构造一棵子树最为其孩子结点,二者权值之和作为根结点;

    (2)在原集合中删除这两个结点的权值,并引入根节点的权值;

    (3)重复步骤(1)和步骤(2),直到原权值集合为空。

    哈夫曼编码:根据哈夫曼树进行边长编码,编码长度与路径长度相关,左侧分支编码为0(或1),右侧分支编码为1(或0),从根结点到对应叶子结点所有路径分支上右侧分支编码为1(或0),从根结点到对应叶子结点所有路径分支上的编码记录下来,即为该叶子结点的编码。

    树的遍历操作:遍历是按某种策略访问树中的每个结点,且仅访问一次的过程。

    前序遍历:又称为先序遍历,按根à左à右的顺序进行遍历。

    后序遍历:按左->右->根的顺序进行遍历。

    中序遍历:按左->根->右的顺序进行遍历。

    层次遍历:按层次顺序进行遍历。

  • 相关阅读:
    【C#】WCF和TCP消息通信练习,实现聊天功能
    2021年3月青少年软件编程(Python)等级考试试卷(一级)
    Spring学习总结一
    ​目标检测算法——YOLOv5/YOLOv7改进之结合Criss-Cross Attention
    图片地址GPS经纬度查询
    前端解决反序列化long类型精度丢失的问题
    java日志框架详解-Log4j2
    vue2+element-ui实现表格分页显示
    元宇宙会成为IPv6的拐点吗?
    【JVM笔记】Minor GC、Major GC和Full GC
  • 原文地址:https://blog.csdn.net/flysh05/article/details/126940758