zoukankan      html  css  js  c++  java
  • 二叉树系列(一):已知先序遍历序列和中序遍历序列,求后序遍历序列

      首先介绍一下三种遍历顺序的操作方法:

      1.先序遍历

      (1)訪问根结点;

      (2)先序遍历左子树;

      (3)先序遍历右子树。

      2.中序遍历

      (1)中序遍历左子树;

      (2)訪问根结点;

      (3)中序遍历右子树。

      3.后序遍历

      (1)后序遍历左子树。

      (2)后序遍历右子树;

      (3)訪问根结点。

      知道了二叉树的三种遍历规则。仅仅要有中序遍历序列和前后任一种遍历序列,我们就能够求出第三种遍历序列。今天我们研究的是已知先序和中序遍历序列。求后序遍历序列。

      已知该二叉树的先序遍历序列为:A-B-D-E-G-C-F,中序遍历序列为:D-B-G-E-A-C-F。

      接下来我们就能够求出该二叉树的后序遍历序列。详细过程例如以下:

      第一步:先求root根节点,依据先序遍历规则我们可知root为先序遍历序列的第一个节点,因此该二叉树的root节点为A。

      第二步:求root的左子树和右子树,这点我们能够从中序遍历序列中找出,位于root节点A左側的D-B-G-E为root的左子树,位于A右側的C-F为右子树。

      第三步:求root的左孩子leftchild和右孩子rightchild,leftchild为左子树的根节点。rightchild为右子树的根节点。我们能够找到左子树D-B-E-G在先序遍历序列中的排列顺序为B-D-E-G。因为先序遍历首先訪问根节点。所以B为左子树的根节点。即B为root的leftchild。同理root的rightchild为C。

      第四步:我们能够依据上面的步骤找到B的左子树和右子树,以及C的左子树和右子树,然后分别求出左右子树的根节点。以此类推。仅仅要求出根节点及其leftchild和rightchild,剩下的过程都是递归的。最后我们就能够还原整个二叉树。

      依据以上步骤我们求出的二叉树例如以下图所看到的:

     

      最后我们就能够依据兴许遍历规则得出该二叉树的兴许遍历序列为:D-G-E-B-F-C-A。

      还有一种情况为已知中序和后序遍历序列求先序遍历序列。我们将分别在后面的博客中介绍。

                         ————————未完。待续。。。————————

      

  • 相关阅读:
    懒加载——实现原理
    html5shiv.js和respond.min.js
    点击app分享链接,js判断手机是否安装某款app,有就尝试打开,没有就下载
    ajax获取后台数据渲染(整片文章不分段落)解决方案,要使用htmL方式输出
    +-下拉菜单
    html 中a标签的问题(无反应,跳转,调用方法)
    js中两种定时器,setTimeout和setInterval的区别
    chrome 调试进入 paused in debugger 状态解决办法
    mybatis-plus 获取新增id
    linux unzip和zip
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5059632.html
Copyright © 2011-2022 走看看