• 二叉树


    性质1 在二叉树的第i层至多有(2^{i-1})个结点(i$geq$1)

    性质2 深度为K的二叉树至多有(2^k-1)个节点 (k$geq$1)

    二叉树的遍历

    前序遍历

    中序遍历

    后序遍历

    线索二叉树

    一棵结点数目为n的二叉树,采用二叉链表的形式存储。对于每个结点均有指向左右孩子的两个指针域,而结点为n的二叉树一共有n-1条有效分支路径。那么,则二叉链表中存在2n-(n-1)=n+1个空指针域。那么,这些空指针造成了空间浪费。

    ![img](https://upload-images.jianshu.io/upload_images/7043118-ba659234c2fe8c18.png?imageMogr2/auto-orient/strip|imageView2/2/w/694/format/webp)

    线索化

    若结点的左子树为空,则该结点的左孩子指针指向其前驱结点。

    若结点的右子树为空,则该结点的右孩子指针指向其后继结点。

    ![img](https://upload-images.jianshu.io/upload_images/7043118-25c559973889cb3a.png?imageMogr2/auto-orient/strip|imageView2/2/w/857/format/webp)

    ​ 线索二叉树

    线索化带来新问题

    ltag为0时,指向左孩子,为1时指向前驱

    rtag为0时,指向右孩子,为1时指向后继

    添加ltag和rtag属性后的结点结构如下:

    ![img](https://upload-images.jianshu.io/upload_images/7043118-a05b18037d16368f.png?imageMogr2/auto-orient/strip|imageView2/2/w/404/format/webp)

    ​ 添加标志线索二叉树结点

    线索二叉树转变二叉树

    ![img](https://upload-images.jianshu.io/upload_images/7043118-163d458fb7d7f7e6.png?imageMogr2/auto-orient/strip|imageView2/2/w/888/format/webp)

    ​ 添加标志位的线索二叉树

    二叉排序树

    构造一个有n个结点的二叉排序树,在最坏的情况下,深度不超过n。

    现有序列:61 87 59 47 35 73 51 98 37 93

    构造过程如下:
    1)索引 i = 0,A[i] = 61,结点61作为根结点,如图2.1:

    img

    2)索引 i = 1,A[1] = 87, 87 > 61,且结点61右孩子为空,故81为61结点的右孩子,如图2.2:

    img

    3)索引 i = 2,A[i] = 59,59 <
    61,且结点61左孩子为空,故59为61结点的左孩子,如图2.3:

    img

    4)索引 i = 3,A[3] = 47,47 < 59,且结点59左孩子为空,故47为59结点的左孩子,如图2.4:

    img

    5)索引 i = 4,A[4] = 35,35 < 47,且结点47左孩子为空,故35为47结点的左孩子,如图2.5:

    img

    采用同样规则遍历整个数组得到如图2.6所示的一棵排序二叉树。

    img

  • 相关阅读:
    使用ZooKeeper实现Java跨JVM的分布式锁
    基于ZooKeeper的分布式锁和队列
    activiti数据库表结构剖析
    visualvm监控jvm及远程jvm监控方法
    使用visualvm 远程监控 JVM
    java jprofile
    Linux服务器上监控网络带宽的18个常用命令
    Redis-sentinel哨兵模式集群方案配置
    电容的去耦半径
    DC-DC BUCK电源芯片的基本原理和组成
  • 原文地址:https://www.cnblogs.com/snail-gao/p/11739726.html
Copyright © 2020-2023  润新知