zoukankan      html  css  js  c++  java
  • 数据结构已知后序和中序画出该树

    已知二叉树后序遍历序列是DBCEFGHA,中序遍历序列EDCBAHFG,它的前序遍历的序列是?麻烦再画下这二叉树.

    后续遍历的顺序是左右根,中序遍历的顺序是左根右 
    这点应该懂吧 
    由后续访问序列可以看出最后一个被访问的必定是这个树的根 
    而中序遍历的序列可以看出,一棵树当根确定后,在根前面被访问的是他的左子树,后边的是他的右子树元素 
    弄懂了上边两点就开始做题吧 
    由后序遍历序列是DBCEFGHA 
    为了方便,我写小写字母了啊 
    可以看出整棵树的根节点是a 
    再看中序遍历序列EDCBAHFG 
    a是根节点 
    左子树由a左边的元素EDCB构成 
    右子树由a右边的元素HFG构成 
    也就是 

    /----/ 
    EDCB--HFG 
    到这里应该都懂吧 
    那接下来就着重讲一下左子树的确定 
    右子树同理可得了 
    看左子树有4个元素EDCB 
    后序遍历序列是DBCE 
    最后访问e 
    可以确定a下边连接的是e 
    根据中序遍历序列EDCB 
    最先访问e 
    由于中序遍历e前面没有元素 
    可以确定e左子树为空 
    即下面的样子 

    // 


    dbc 
    也就是还剩下dbc的顺序没理好 
    后序遍历序列是dbc 
    最后访问c 
    则c为根节点 
    连接e 
    中序遍历序列dcb 
    c前边有d 
    后边有b 
    哪么可以确定dcb这棵树为 

    // 
    d b 
    哪么整棵树的左子树就确定了 
    为 



    // 
    d b 
    同理 
    右子树应为 





    则整棵树就出来了 
    为下图所示 
    得出整棵树 
    前序遍历自然不在话下 
    为aecdbhgf 
    ------------------------
    晕了,想偷下懒都不行呵
    同理就是要你自己照着刚才的方法再推右边啊
    左边在上边已经说了
    那我们来看右边
    右边剩下HFG
    后序遍历序列是fgh
    h最后被访问
    可以确定h是右子树的根
    也就是与a连着的是h
    接下来看中序遍历顺序是HFG
    h前面没有元素
    说明h的左子树为空
    剩下的g和f都是他的右子树的元素
    再看后续遍历序列FG
    g最后被访问
    可以确定g是根节点连接h
    然后看中序遍历序列fg
    f在前
    哪么f应该为g的左子树
    整棵树就出来了

    再不懂我也不知道怎么解释了


    ------------------------- 
    好久没做类似的题 
    有点生疏了 
    若果有错 
    欢迎指出

  • 相关阅读:
    java Activiti 工作流引擎 SSM 框架模块设计方案
    自定义表单 Flowable 工作流 Springboot vue.js 前后分离 跨域 有代码生成器
    数据库设计的十个最佳实践
    activiti 汉化 stencilset.json 文件内容
    JAVA oa 办公系统模块 设计方案
    java 考试系统 在线学习 视频直播 人脸识别 springboot框架 前后分离 PC和手机端
    集成 nacos注册中心配置使用
    “感恩节 ”怼记
    仓颉编程语言的一点期望
    关于System.out.println()与System.out.print("\n")的区别
  • 原文地址:https://www.cnblogs.com/lyxcode/p/7866969.html
Copyright © 2011-2022 走看看