题目
给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。
示例 1:
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
题解
var buildTree = function(preorder, inorder) {
if(!preorder.length)
return null;
let root = new TreeNode(preorder[0]);
let mid = inorder.findIndex((number) => number === root.val);
root.left = buildTree(preorder.slice(1, mid + 1), inorder.slice(0, mid));
root.right = buildTree(preorder.slice(mid + 1, preorder.length), inorder.slice(mid + 1, inorder.length));
return root;
};
var buildTree = function(preorder, inorder) {
if(!preorder.length) return null;
let root=new TreeNode(preorder[0])
let mid=inorder.findIndex((number)=>number == root.val)//用大括号可能比较占空间???
root.left=buildTree(preorder.slice(1,mid+1),inorder.slice(0,mid))//preorder再次切割传输的时候不需要去除mid,因为mid对应的数就是第一个--已经在第一个去掉了
root.right=buildTree(preorder.slice(mid+1,preorder.length),inorder.slice(mid+1,inorder.length))
return root
};
思路:
- 前序遍历的第一个值就是根节点,根据根节点切割中序遍历的数组,为左中和右中,然后根据中序遍历出的左子树和右子树的长度分割前序遍历的数组,然后进行迭代。分数组的时候需要注意区间的范围。
- array:slice(start,end)左闭右开
- findIndex 传入一个函数,在数组中找出符合该函数的第一个index,不存在则返回-1(别记错名字了- -