leetcode -- 105. Construct Binary Tree from Preorder and Inorder Traversal

题目描述

题目难度:Medium

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.
在这里插入图片描述

AC代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        if(preorder == null || preorder.length == 0 || inorder == null || inorder.length == 0 || preorder.length != inorder.length)
            return null;
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0;i < inorder.length;i++){
            map.put(inorder[i], i);
        }
        return buildTreeCore(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1, map);
    }
    
    private TreeNode buildTreeCore(int[] preorder, int pstart, int pend, int[] inorder, int istart, int iend, Map<Integer, Integer> map){
        if(pstart > pend) return null;
        TreeNode root = new TreeNode(preorder[pstart]);
        int idx = map.get(preorder[pstart]);
        root.left = buildTreeCore(preorder, pstart + 1, pstart + idx - istart, inorder, istart, idx - 1, map);
        root.right = buildTreeCore(preorder, pstart + idx - istart + 1, pend, inorder, idx + 1, iend, map);
        return root;
    }
    
  
}

猜你喜欢

转载自blog.csdn.net/tkzc_csk/article/details/88682860