博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4、重建二叉树------------>剑指offer系列
阅读量:4607 次
发布时间:2019-06-09

本文共 1899 字,大约阅读时间需要 6 分钟。

题目1-二叉树重建

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

思路

  • 前序遍历:跟节点 + 左子树前序遍历 + 右子树前序遍历
  • 中序遍历:左子树中序遍历 + 跟节点 + 右字数中序遍历
  • 后序遍历:左子树后序遍历 + 右子树后序遍历 + 跟节点

根据上面的规律:

  • 前序遍历找到根结点root
  • 找到root在中序遍历的位置 -> 左子树的长度和右子树的长度
  • 截取左子树的中序遍历、右子树的中序遍历
  • 截取左子树的前序遍历、右子树的前序遍历
  • 递归重建二叉树

代码

function reConstructBinaryTree(pre, vin) {        if(pre.length === 0){            return null;        }        if(pre.length === 1){            return new TreeNode(pre[0]);        }        const value = pre[0];        const index = vin.indexOf(value);        const vinLeft = vin.slice(0,index);        const vinRight = vin.slice(index+1);        const preLeft = pre.slice(1,index+1);        const preRight = pre.slice(index+1);        const node = new TreeNode(value);        node.left = reConstructBinaryTree(preLeft, vinLeft);        node.right = reConstructBinaryTree(preRight, vinRight);        return node;    }

题目2-求二叉树的遍历

给定一棵二叉树的前序遍历和中序遍历,求其后序遍历

输入描述:

两个字符串,其长度n均小于等于26。 第一行为前序遍历,第二行为中序遍历。 二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。

输出描述:

输入样例可能有多组,对于每组测试样例, 输出一行,为后序遍历的字符串。

样例:

输入ABCBACFDXEAGXDEFAG输出BCAXEDGAF

思路

和上面题目的思路基本相同

  • 前序遍历找到根结点root
  • 找到root在中序遍历的位置 -> 左子树的长度和右子树的长度
  • 截取左子树的中序遍历、右子树的中序遍历
  • 截取左子树的前序遍历、右子树的前序遍历
  • 递归拼接二叉树的后序遍历

代码

let pre;let vin; while((pre = readline())!=null){    vin = readline();    print(getHRD(pre,vin));}     function getHRD(pre, vin) {      if (!pre) {        return '';      }      if (pre.length === 1) {        return pre;      }      const head = pre[0];      const splitIndex = vin.indexOf(head);      const vinLeft = vin.substring(0, splitIndex);      const vinRight = vin.substring(splitIndex + 1);      const preLeft = pre.substring(1, splitIndex + 1);      const preRight = pre.substring(splitIndex + 1);      return getHRD(preLeft, vinLeft) + getHRD(preRight, vinRight) + head;    }
 

 

 

 

转载于:https://www.cnblogs.com/QianDingwei/p/10896314.html

你可能感兴趣的文章
我的2015---找寻真实的自己
查看>>
android编译遇到问题修改
查看>>
解决Ubuntu18.04.2远程桌面Xrdp登录蓝屏问题
查看>>
python_封装redis_hash方法
查看>>
《windows程序设计》获取窗口尺寸(05)
查看>>
【重点突破】——Canvas技术绘制音乐播放器界面
查看>>
监控级联时各个层的PoE交换机怎么选?
查看>>
存储过程
查看>>
ADO.NET--SqlConnection、SqlCommand的学习
查看>>
PCA降维处理
查看>>
random模块
查看>>
CSS3 新属性兼容性测试
查看>>
js闭包
查看>>
Oralce导入数据库出现某一列的值太大
查看>>
Union和Union All 的区别
查看>>
sql server 2005函数
查看>>
innotop
查看>>
jmeter 取样器--http请求详解
查看>>
【转载】Understanding the Objective-C Runtime
查看>>
aabb碰撞检测
查看>>