LeetCode Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:cnki翻译助手软件下载 编辑:程序博客网 时间:2024/05/21 17:31

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

Note:
You may assume that duplicates do not exist in the tree.

思路分析:这题类似于LeetCode Construct Binary Tree from Inorder and Postorder Traversal,可以参考这篇题解,主要考察递归。

AC Code

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode buildTree(int[] preorder, int[] inorder) {        HashMap<Integer, Integer> inorderValueToIndexMap = new HashMap<Integer, Integer>();        for(int i = 0; i < inorder.length; i++){            inorderValueToIndexMap.put(inorder[i], i);        }        return buildTreeHelper(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1, inorderValueToIndexMap);    }        public TreeNode buildTreeHelper(int [] preorder, int ps, int pe, int[] inorder, int is, int ie, HashMap<Integer, Integer> inorderValueToIndexMap){        if(ps > pe || is > ie) return null;        TreeNode root = new TreeNode(preorder[ps]);        int indexOfRootInorder = inorderValueToIndexMap.get(root.val);        int leftNum = indexOfRootInorder - is;        int rightNum = ie - indexOfRootInorder;        root.left = buildTreeHelper(preorder, ps + 1, ps + leftNum, inorder, indexOfRootInorder - leftNum, indexOfRootInorder -1, inorderValueToIndexMap);        root.right = buildTreeHelper(preorder, ps + leftNum + 1, ps + leftNum + rightNum, inorder, indexOfRootInorder + 1, indexOfRootInorder + rightNum, inorderValueToIndexMap);        return root;    }}


0 0
原创粉丝点击