zoukankan      html  css  js  c++  java
  • [算法]二叉树基础与二叉查找树与堆

    在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(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、删除最大数据。删除堆顶后,把最后的数据放到堆顶位置,然后从上往下调整位置。
  • 相关阅读:
    Scala (三)集合
    为什么成为一名程序员?
    Hadoop——Yarn
    Redis(一)NoSQL简介、Redis安装 、数据类型、配置文件、发布订阅
    Java并发编程——共享模型之内存( JMM、原子性、可见性、有序性、volatile原理)
    KafkaAPI实战案例
    分布式技术原理笔记(二)分布式体系结构
    Flume 进阶
    Kafka框架基础
    Scala (二)面向对象
  • 原文地址:https://www.cnblogs.com/iyjhabc/p/2987471.html
Copyright © 2011-2022 走看看