题目链接
法一
private TreeNode preorderTraversal(int preLeft, int preRight, int inLeft, int inRight, int[] preorder, int[] inorder) {
if (preLeft > preRight || inLeft > inRight) {
return null;
}
TreeNode root = new TreeNode(preorder[preLeft]);
int inRoot = inLeft;
while (inRoot <= inRight && inorder[inRoot] != preorder[preLeft]) {
inRoot++;
}
int left = inRoot - inLeft;
root.left = preorderTraversal(preLeft + 1, preLeft + left, inLeft, inRoot - 1, preorder, inorder);
root.right = preorderTraversal(preLeft + left + 1, preRight, inRoot + 1, inRight, preorder, inorder);
return root;
}
public TreeNode buildTree(int[] preorder, int[] inorder) {
return preorderTraversal(0, preorder.length - 1, 0, inorder.length - 1, preorder, inorder);
}
本地测试
lay.showTitle(105);
Solution105 sol105 = new Solution105();
int[] preorder105 = new int[]{3, 9, 20, 15, 7};
int[] inorder105 = new int[]{9, 3, 15, 20, 7};
System.out.println(Arrays.toString(preorder105));
System.out.println(Arrays.toString(inorder105));
TreeNode tree105 = sol105.buildTree(preorder105, inorder105);
treeOpt.layerOrder(tree105);