数据结构近期3月底未完问题

重点记忆,只对我个人而言

  1. 已知二叉树前序和中序,求完整二叉树及后序
  2. 线索二叉树的意义
  3. 二叉树与树、森林之间的转换
  4. 树和森林的遍历
  5. 堆(最小堆)的建立

已知二叉树前序和中序,求完整二叉树及后序

见数据结构154页

示例:
前序:ABCDEFG
中序:   CBEDAFG

  1. 由于前序知道A肯定是根
  2. 由前序中得知A为跟的情况,再看中序A的位置,A左边的均为左子树节点,右边则属于右子树节点.

由以上得知

LChind: BCDE
Data:A
RChild: FG
然后对前序:BCDE,后序:CBED 依照上面的1,2步骤方法,可得

LChind: C
Data:B
RChild: DE

当一侧只剩下2个节点的时候就好处理多了

线索二叉树的意义

http://www.cnblogs.com/Clingingboy/archive/2010/03/31/1701288.html

如果采用三叉树的话,就没线索二叉树什么事了,完全是为了节省空间(内存),从而增加的复杂度

重在理解节点的前驱(节点上个访问的节点)和后继(下个要访问的节点)

二叉树与树、森林之间的转换

image

图1

image

图2

森林转换到二叉树的方法是建立在树转换到二叉树方法的基础上的

image

图3

结论:当森林转换为二叉树时,其第一棵树的子树森林转换为左子树,剩余树的森林转换为右子树

二叉树还原为森林:

树和森林的遍历

1.树的遍历

image

上面的遍历应该可以理解,树没有中序遍历(因为树子节点大于2,可以理解吧).
注意: 树的后序遍历就是树转换为二叉树后的中序遍历(树的先序也可以是二叉树的先序)

如下图:中序遍历
image

森林的遍历是基于树的遍历基础上的

image

image

堆(最小堆)的建立

最小堆的成立条件:每个节点大于或等于该节点的子节点,最大堆则反之
满足其中之一的堆均成立
看两个例子

一.严蔚敏数据结构的例子

参考:http://www.cnblogs.com/wu8685/archive/2010/12/30/1922218.html

image

规则:
  1. 从叶子节点开始与父节点交换
  2. 如果交换后满足堆的特点,则停止该节点的交换,继续其他叶子节点的交换
  3. 如果叶子节点交换完毕,则观察上一层节点,当交换的时候则需要将交换的节点与叶子节点继续比较,如果不满足特性则继续交换如图4

练习:
判断序列(16,19,10,15,4,23,36,20)是否为(小顶)堆?为什么?如果不是,请按照建立堆的思想把它调整为堆,并用图表示建堆的过程。

因为不满足(ai<a2i 和ai<a2i+1)如a1=16,a3=10,所以不是小顶堆。

可以调整为堆:(4,15,10,16,19,23,36,20)

clip_image002

  1. 4跟19换
  2. 4跟16换
  3. 15跟16换

二叉树非递归的遍历实现

原文地址:https://www.cnblogs.com/Clingingboy/p/1984223.html