前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >已知两种遍历序列求原始二叉树

已知两种遍历序列求原始二叉树

作者头像
孙晨c
发布2019-09-10 19:19:25
4100
发布2019-09-10 19:19:25
举报
文章被收录于专栏:无题~无题~

注意事项:

  1. 只有通过先序和中序 或者 中序和后序,可以还原出原始的二叉树(确定一个二叉树)

  2. 已知先后中序的任意一个序列 或者 先序和后序,都不能还原出原始的二叉树

    已知先序和中序,求后序:

思路:

先序里面,最先出现的是根节点,所以A就是根节点

中序里面,根节点A在中间,所以A的左边BDCE是左子树,A的右边FHG是右子树

先序里面,A的左子树B最先出现,所以B是左子树的根节点

中序里面,根节点B的左边没有结点,所以B的左子树为空,即DCE是B的右子树

先序里面,B的右子树C最先出现,所以C是右子树的根节点

中序里面,D在C的左边,E在C的右边,所以D是C的左子树,E是C的右子树

至此,A的左子树还原完毕

先序里面,A的右子树F最先出现,所以F是根节点

中序里面,根节点F的左边没有结点,所以F的左子树为空,即HG是F的右子树

先序里面,F的右子树G最先出现,所以G是根节点

中序里面,根节点G的左边有结点H,所以H是G的左子树

至此,A的二叉树还原完毕

即原始二叉树的后序为:D-E-C-B-H-G-F-A

    已知中序和后序,求先序:

后序里面,最后出现的是根节点,所以A是根节点

中序里面,根节点A在中间,所以A的左边BDCE是左子树,A的右边FHG是右子树

后序里面,A的左子树B最后出现,所以B是左子树的根节点

中序里面,根节点B的左边没有结点,所以B的左子树为空,B的右子树是DCE

后序里面,B的右子树C最后出现,所以C是根节点

中序里面,根节点C的左边是E,所以E是C的左子树,C的右边是E,所以E是C的右子树

至此A的左子树还原完毕

后序里面,A的右子树F最后出现,所以F是根节点

中序里面,根节点F左边没有结点,所以F的左子树为空,F的右子树为HG

后序里面,F的右子树G最后出现,所以G是根节点

中序里面,G的左子树为H,G的右边没有结点,所以G的右子树为空

至此,A的二叉树还原完毕

所以先序为:A-B-C-D-E-F-G-H

通过这两个例子不难发现,已知先序和中序或者中序和后序,进行还原二叉树时需要不断交替观察结点在先序、中序或者中序、后序里的位置,结合先序遍历、中序遍历、后序遍历的特点,根据先序和后序能确定根节点,根据中序能判断左右子树的结点,这样便能还原出原始的二叉树。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注意事项:
    •   1. 只有通过先序和中序 或者 中序和后序,可以还原出原始的二叉树(确定一个二叉树)
      •   2. 已知先后中序的任意一个序列 或者 先序和后序,都不能还原出原始的二叉树
        •     已知先序和中序,求后序:
          •     已知中序和后序,求先序:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档