堆的概念:

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

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

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

  A、65,12,30,50,9,19,20,4,,17,60
  B、65,12,30,9,50,19,4,20,17,60
  C、65,9,30,12,19,50,4,20,17,60
  D、65,12,9,30,50,4,20,9,17,60

一、序列构造成堆:

  堆构造原则:先固定已稳定的堆,再 安照从上到下,从左到右的原则堆积。

  小顶堆原理:每个结点的值都小于其左孩子和右孩子结点的值

  堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列                                        堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

 

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列                           堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

 堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列                           堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

 

 堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列             堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列             堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列              堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列         堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

  小顶堆映射的数组为 堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

大顶堆

  原理与小顶堆相似:每个结点的值都大于其左孩子和右孩子结点的值

        堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

  大顶堆映射的数组为 堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

  注:蓝色为稳定状态,橙色为新增未确定状态,红色为要调整状态

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

   中序遍历:左中右     对构造成功的 小顶堆

  堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列     堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列              堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

 

 

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列        堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列        堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列      堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列    堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

 堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列      堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 中序遍历遍历结果:堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 答案选: B

先序遍历遍历结果:堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

后序遍历遍历结果:堆(大顶堆,小顶堆),中序遍历,前序遍历,后续遍历序列

 

相关文章:

  • 2021-09-10
  • 2021-08-29
  • 2021-12-17
  • 2022-01-01
  • 2021-10-12
  • 2021-04-03
猜你喜欢
  • 2022-02-07
  • 2021-11-15
  • 2021-08-22
  • 2021-12-25
  • 2022-02-07
  • 2022-12-23
相关资源
相似解决方案