• [算法]二叉树基础与二叉查找树与堆


    在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

    二叉树性质:
    1、二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
    2、二叉树第i层上的结点数目最多为2^(i-1)个(i≥1)
    3、深度为k的二叉树至多有2^k-1个结点
    4、在任意-棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则no=n2+1。

    概念:
    满二叉树:一棵深度为k,且有(2的k次方)-1个节点成为满二叉树
    完全二叉树:深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中序号为1至n的节点对应时,称之为完全二叉树

    存储结构:
    (1)顺序存储:数组,向量等。 优点:可快速读取父节点和子节点; 缺点:如果不是完全二叉树,则会浪费空间。
    当一个元素的下标为i,则它的父节点为(i-1)/2;它的左右儿子分别为2*i+1和2*i+2
    (2)链表存储:单、双向链表。 优点:节省空间; 缺点:不能随机存取父节点(单向链表的话),需要重新遍历。

    堆的性质:
    1、堆是一个二叉树。堆上每个节点的值都大于等于它的两个儿子的值。
    2、堆顶的值一定是整个堆的最大值
    3、因此适合用堆来构造优先队列(priority queue),优先队列支持两个基本操作,删除最大值和插入新值。

    堆的操作:
    1、插入数据。从最底插入,不断与父节点比较。如果父节点小于新增元素,则调换。直到找到比新元素更大的父节点。
    2、删除最大数据。删除堆顶后,把最后的数据放到堆顶位置,然后从上往下调整位置。
  • 相关阅读:
    Linux启动或禁止SSH用户及IP的登录
    How to Setup Chroot SFTP in Linux (Allow Only SFTP, not SSH)
    vsftp被动模式启用iptables访问设置
    关于使用Element.getNodeValue()返回NULL的问题
    Quartz 有状态的JobDataMap
    log4j学习日记-写入数据库
    LeetCode 551. Student Attendance Record I (学生出勤纪录 I)
    LeetCode 680. Valid Palindrome II (验证回文字符串 Ⅱ)
    LeetCode 125. Valid Palindorme (验证回文字符串)
    LeetCode 541. Reverse String II (反转字符串 II)
  • 原文地址:https://www.cnblogs.com/iyjhabc/p/2987471.html
Copyright © 2020-2023  润新知