题目描述
难度:Middle
相关话题:树
、深度优先搜索
、数组
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder =[3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
思路:
按照preorder
的顺序从inorder
内部查找,对于查找到的索引idx
,将当前inorder
的左lo
和右hi
边界继续分割为[lo,idx-1]
和[idx+1,hi]
,继续递归处理。
和NO.106
的区别在于preorder
需要从左向右,并且先left
子树再right
子树。
/**
* @ Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {number[]} preorder
* @param {number[]} inorder
* @return {TreeNode}
*/
var buildTree = function(preorder, inorder) {
let preIdx=0
return createTree(0,inorder.length-1)
function createTree(lo,hi){
if(lo>hi)return null
let val=preorder[preIdx++]
let idx=inorder.indexOf(val)
let node=new TreeNode(val)
node.left=createTree(lo,idx-1)
node.right=createTree(idx+1,hi)
return node
}
};
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程
本文著作权归作者所有,如若转载,请注明出处
转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com