题目链接
法一
private Map<Integer, Integer> mp = new HashMap<>();
private TreeNode preorderTraversal(int inLeft, int inRight, int postLeft, int postRight, int[] inorder, int[] postorder) {
if (inLeft > inRight || postLeft > postRight) {
return null;
}
TreeNode root = new TreeNode(postorder[postRight]);
int inRoot = mp.get(postorder[postRight]);
int left = inRoot - inLeft;
root.left = preorderTraversal(inLeft, inRoot - 1, postLeft, postLeft + left - 1, inorder, postorder);
root.right = preorderTraversal(inRoot + 1, inRight, postLeft + left, postRight - 1, inorder, postorder);
return root;
}
public TreeNode buildTree(int[] inorder, int[] postorder) {
for (int index = 0; index < inorder.length; index++) {
mp.put(inorder[index], index);
}
return preorderTraversal(0, inorder.length - 1, 0, postorder.length - 1, inorder, postorder);
}
本地测试
lay.showTitle(106);
Solution106 sol106 = new Solution106();
int[] inorder106 = new int[]{9, 3, 15, 20, 7};
int[] postorder106 = new int[]{9, 15, 7, 20, 3};
System.out.println(Arrays.toString(inorder106));
System.out.println(Arrays.toString(postorder106));
TreeNode tree106 = sol106.buildTree(inorder106, postorder106);
treeOpt.layerOrder(tree106);