天天看点

【LeetCode 105】从前序与中序遍历序列构造二叉树

相似题目:

  • ​​【LeetCode 106】从中序与后序遍历序列构造二叉树​​
  • ​​【LeetCode 889】根据前序和后序遍历构造二叉树​​

题目描述

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:

你可以假设树中没有重复的元素。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]      

返回如下的二叉树:

3
   / \
  9  20
    /  \
   15   7      

解题思路

对于这道题,我们先看下前序遍历和中序遍历的规律:

前序遍历的顺序是根节点、左子节点、右子节点,所以数组第一个值就是二叉树的根节点,然后我们看中序遍历,中序遍历的顺序是左子节点、根节点、右子节点,所以我们可以根据上面获得根据点判断,哪些是左子节点,哪些是右子节点,依次这样判断即可。

代码实现

/**
 * 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) {
    if(!inorder.length) return null
    let tmp = preorder[0]
    let mid = inorder.indexOf(tmp)
    
    let root = new TreeNode(tmp)
    root.left = buildTree(preorder.slice(1,mid+1),inorder.slice(0,mid))
    root.right = buildTree(preorder.slice(mid+1),inorder.slice(mid + 1))
    return root
};      

提交结果

继续阅读