重建二叉树
题目描述
思路分析
在中序遍历列表中找到先序遍历列表中第一个节点,以此为界限可以将二叉树分为左右子树,可以得知左子树和右子树的长度,在先序遍历列表中划分出来。再依次拿出先序遍历列表中的第一个节点构成左/右子树的根节点,直到传入的先序序列或中序序列为空结束遍历,返回根节点。
代码参考
/*
前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
*/
const reConstructBinaryTree = function (pre, vin) {
// 如果为空树则直接返回
if (!pre.length || !vin.length) return null
// 前序遍历的第一个元素为根节点
const root = new TreeNode(pre.shift())
// 找到root.val在中序遍历中的索引,则数组被分为两部分,左侧为左子树,右侧为右子树
const index = vin.indexOf(root.val)
root.left = reConstructBinaryTree(pre, vin.slice(0, index))
root.right = reConstructBinaryTree(pre.vin.slice(index + 1))
return root
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程