堆,二叉树,红黑树,B数。

堆的概念:

  • 堆中某个节点的值总是不大于或不小于其父节点的值;
  • 堆总是一棵完全二叉树。

以百度的一个面试题为例:

  序列{9,12,17,30,50,20,60,65,4,19}构造为堆后,堆所对应的的中序遍历序列可能为

  65,12,30,50,9,19,20,4,,17,60
  65,12,30,9,50,19,4,20,17,60
  65,9,30,12,19,50,4,20,17,60
  65,12,9,30,50,4,20,9,17,60

一、序列构造成堆:

1:1~9都是,从上到下,从左到右堆积

2

3

4

5

6

7

8

9

10:10中可知,4<30,所以调换位置得到11;

11

12:12中可知,4<12,所以调换位置得到13;

13

14:14中可知,4< 9,所以调换位置得到15,

15:15中加入序列【19】得到16,

16

17:17中可知,19< 50,所以调换位置得到18,

18

上图小顶堆,

  1~9都是,从上到下,从左到右堆积,

  10中可知,4<30,所以调换位置得到11;

  12中可知,4<12,所以调换位置得到13;

  14中可知,4< 9,所以调换位置得到15,

  此时堆稳定,从上到下,从左到右堆积;

  15中加入序列【19】得到16,

  17中可知,19< 50,所以调换位置得到18,

  完成了上述序列的堆的构造。

二、堆所对应的的中序遍历序列

  中序遍历:左中右

  对18进行中序遍历

  1、访问 4 的 左结点 9

  

  2、访问 9 的 左结点 12

  3、访问 12 的 左结点 65,因为 65 没有 左结点,所以取中序遍历的第一个值 65

    当前序列:65

  4、下图 矩形柱 65(左),下一步 12(中)

    当前序列:65,12

  5、下图 矩形柱 65(左), 12(中),下一步 30(右)

    当前序列:65,12,30

  6、下图 矩形柱 12(左), 下一步 9(中)

    当前序列:65,12,30,9

  6、下图 矩形柱 12(左),  9(中),下一步 19(右)但是19有 左结点,

    当前序列:65,12,30,9

  7、下图 矩形柱 50(左),且50有 无 左结点,

    当前序列:65,12,30,9,50

  8、当前序列:65,12,30,9,50,19

   9、当前序列:65,12,30,9,50,19,4

  10、当前序列:65,12,30,9,50,19,4,20

  11、当前序列:65,12,30,9,50,19,4,20,17

  12、当前序列:65,12,30,9,50,19,4,20,17,60

原文地址:https://www.cnblogs.com/mww-NOTCOPY/p/12357402.html

时间: 2024-10-10 21:12:53

堆,二叉树,红黑树,B数。的相关文章

二叉树 - 红黑树

RBTree.h #include <iostream> template <typename T> class RBTree { public: RBTree(); bool insert(const T&); bool del(const T&); void show() { Mid_Order(root); } private: enum { RED, BLACK }; typedef struct _node { bool color; T data; st

TreeMap红黑树

Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator). TreeMap底层通过红黑树(Red-Black tree)实现,也就意味着containsKey(), get(), put(), remove()都有着log(n)的时间复杂度.其具体算法实现参照了<算法导论>. 出于性能原因,TreeMap是非同步

数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉搜索树.红黑树.线索二叉树,它们在解决实际问题中有着非常重要的应用.本文主要从概念和一些基本操作上进行分类和总结. 一.概念总揽 (1) 堆 堆(heap order)是一种特殊的表,如果将它看做是一颗完全二叉树的层次序列,那么它具有如下的性质:每个节点的值都不大于其孩子的值,或每个节点的值都不小于其孩子的值

二叉树、平衡二叉树、B树、B+数、红黑树(简述)

二叉查找树(BST)具备什么特性呢?1.左子树上所有结点的值均小于或等于它的根结点的值.2.右子树上所有结点的值均大于或等于它的根结点的值.3.左.右子树也分别为二叉排序树.查找结点里面的值 的方式就是二分查找的思想 查找次数就是树的高度 二叉查找树可以任意地构造 向一方倾斜的二叉树是不平衡的,查询效率就低了 平衡二叉树(AVL Tree):插入或删除一个节点后,AVL树失去平衡,AVL树失去平衡之后,可以通过旋转使其恢复平衡将根节点的左或右孩子作为新根节点(左旋 右旋 多次旋) 平衡多路查找树

数据结构学习笔记-排序/队/栈/链/堆/查找树/红黑树

排序: 插入排序:每次从剩余数据中选取一个最小的,插入已经排序完成的序列中 合并排序:将数据分成左右两组分别排序,然后合并,对每组数据的排序递归处理. 冒泡排序:重复交换两个相邻元素,从a[1]开始向a[0]方向冒泡,然后a[2]...当a[i]无法继续往前挤的时候说明前面的更小了,而且越往前越小(挤得越往前) 堆排序:构造最大堆,每次取走根结点(自然是最大的),再调用MAX-HEAPIFY算法(见后文的堆)恢复最大堆的性质,重复取走根结点 快速排序(对A[r]-A[n]进行排序): 1.从序列

二叉树,平衡树,红黑树,B~/B+树汇总

二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操作的时候,都不需要彻底重建原始的索引树.最多就是执行一定量的旋转,变色操作来有限的改变树的形态.而这些操作所付出的代价都远远小于重建一棵树.这一优势在<查找结构专题(1):静态查找结构概论 >中讲到过. (2) 查找的时间复杂度大体维持在O(log(N))数量级上.可能有些结构在最差的情况下效率将会下降很快,比如二叉树 1.二叉查找树

Atitit 常见的树形结构 红黑树 &#160;二叉树 &#160;&#160;B树 B+树 &#160;Trie树&#160;attilax理解与总结

Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树2 1.4. 满二叉树和完全二叉树..完全二叉树说明深度达到完全了.2 1.5. 属的逻辑表示 树形比奥死,括号表示,文氏图,凹镜法表示3 1.6. 二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构.3 1.6.1. 3.2 平衡二叉

排序二叉树,平衡二叉树和红黑树的概念以及相关的操作讲解

1. 排序二叉树     排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索. 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值: 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值: 它的左.右子树也分别为排序二叉树. 图 1 显示了一棵排序二叉树: 图 1. 排序二叉树 对排序二叉树,若按中序遍历就可以得到由小到大的有序序列.如图 1 所示二叉树,中序遍历得: {2,3,4,8,9,9

树/二叉树(哈夫曼树/红黑树)笔记

1.树是一种常用数据结构,它是非线性结构. 2.树中任一普通节点可以有0或者多个子节点,但只能有一个父节点. 根节点没有父节点, 叶子节点没有子节点. 3.二叉树: 1)每个节点最多只能有两个子树的有序树 2)左边的子树称为左子树 3)右边的子树成为右子树 4)一棵深度为k的二叉树,如果它包含了(2^k-1)个节点,就把这棵二叉树称为满二叉树 4.满二叉树的特点: 1)每一层上的节点数都是最大节点数,即各层为1,2,4,8,16 .... (2^k-1) 2)一棵有n个节点的二叉树,按满二叉树的

从二叉树到2-3-4树再到红黑树

直接进入正题: 一.如何从数组生成一个二叉树 假设数组为:{ 30, 13, 7, 43, 23, 12, 9, 33, 42, 21, 18, 6, 3, 50 },我们不对数组排序,直接生成二叉树. 创建流程: 1.将第一数作为根节点: 2.插入13,13小于30,放在30的左边子节点. 3.插入7,7小于30,7小于13,放在13的左边子节点. 4.插入43,43大于30,放在30的右边子节点. 5.放入23,23小于30,23大于13,放入13的右边子节点. 6.放入12,12小于30,