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

在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(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、删除最大数据。删除堆顶后,把最后的数据放到堆顶位置,然后从上往下调整位置。

    原文作者:iyjhabc
    原文地址: https://www.cnblogs.com/iyjhabc/archive/2012/11/05/2987471.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞