import java.util.*; // public class TreeNode { // int val = 0; // TreeNode left = null; // TreeNode right = null; // public TreeNode(int val) { // this.val = val; // } // } [1,2,4,7,3,5,6,8] [4,7,2,1,5,3,8,6] public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param preOrder int整型一维数组 * @param vinOrder int整型一维数组 * @return TreeNode类 */ public TreeNode solve(int[] preOrder, int preLeft, int preRight, int[] vinOrder, int vinLeft, int vinRight) { if (preLeft > preRight) { return null; } int headVal = preOrder[preLeft]; TreeNode head = new TreeNode(headVal); int partition = -1; int l_preLeft, l_preRight, l_vinLeft, l_vinRight; int r_preLeft, r_preRight, r_vinLeft, r_vinRight; // 由中序排列确定划分 for (int i = vinLeft; i <= vinRight; ++i) { if (vinOrder[i] == headVal) { partition = i; break; } } l_vinLeft = vinLeft; l_vinRight = partition - 1; r_vinLeft = partition + 1; r_vinRight = vinRight; l_preLeft = preLeft + 1; // 左子前序起点 l_preRight = preLeft + partition - vinLeft; r_preLeft = l_preRight + 1; r_preRight = preRight; head.left = solve(preOrder, l_preLeft, l_preRight, vinOrder, l_vinLeft, l_vinRight); head.right = solve(preOrder, r_preLeft, r_preRight, vinOrder, r_vinLeft, r_vinRight); return head; } public TreeNode reConstructBinaryTree (int[] preOrder, int[] vinOrder) { // write code here return solve(preOrder, 0, preOrder.length - 1, vinOrder, 0, vinOrder.length - 1); } }