1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| package eternal.fire.java;
import java.util.HashMap; import java.util.Map;
public class LeetCode { public static void main(String[] args) { Solution solution = new Solution(); int[] preorder = new int[]{1, 2, 3}; int[] inorder = new int[]{3, 2, 1}; TreeNode root = solution.buildTree(preorder, inorder); } }
class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { if (preorder.length == 0) { return null; } Map<Integer, Integer> rootIndex = new HashMap<>(); for (int i = 0; i < inorder.length; i++) { rootIndex.put(inorder[i], i); }
return buildTree(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1, rootIndex); }
private TreeNode buildTree(int[] preorder, int preBegin, int preEnd, int[] inorder, int inBegin, int inEnd, Map<Integer, Integer> rootIndex) { if (preBegin > preEnd) { return null; }
TreeNode treeRoot = new TreeNode(preorder[preBegin]);
if (preBegin == preEnd) { return treeRoot; }
int root = rootIndex.get(preorder[preBegin]);
int leftLen = root - inBegin;
treeRoot.left = buildTree(preorder, preBegin + 1, preBegin + leftLen, inorder, inBegin, root - 1, rootIndex); treeRoot.right = buildTree(preorder, preBegin + leftLen + 1, preEnd, inorder, root + 1, inEnd, rootIndex); return treeRoot; } }
class TreeNode { int val; TreeNode left; TreeNode right;
TreeNode(int x) { val = x; } }
|