zoukankan      html  css  js  c++  java
  • 数据结构近期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换

    二叉树非递归的遍历实现

  • 相关阅读:
    Linux 日志管理
    Linux 备份与恢复
    Linux 启动管理
    Linux 用户和用户组管理
    产生指定时间区间序列、按指定单位变化时间 python实现
    python上数据存储 .h5格式或者h5py
    数据预处理之独热编码(One-Hot Encoding)
    残差网络
    GBDT为什么不能并行,XGBoost却可以
    百融金服、趣店、中航信面试总结
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1984223.html
Copyright © 2011-2022 走看看