题解 | #重建二叉树#数组copyOfRange
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param preOrder int整型一维数组 * @param vinOrder int整型一维数组 * @return TreeNode类 */ public TreeNode reConstructBinaryTree (int[] preOrder, int[] vinOrder) { // write code here if (preOrder.length == 0) return null; TreeNode binaryTree = new TreeNode(preOrder[0]); int rootIndexInvin = 0; while (preOrder[0] != vinOrder[rootIndexInvin]) { rootIndexInvin++; } System.out.println(rootIndexInvin); // 左子树 int[] dfsLeftVinOrder = new int[rootIndexInvin]; int[] dfsLeftPreOrder = new int[rootIndexInvin]; System.out.println(dfsLeftPreOrder.length); dfsLeftVinOrder = Arrays.copyOfRange(vinOrder, 0, rootIndexInvin); dfsLeftPreOrder = Arrays.copyOfRange(preOrder, 1, rootIndexInvin + 1); // 右子树 int[] dfsRightVinOrder = new int[vinOrder.length - rootIndexInvin - 1]; int[] dfsRightPreOrder = new int[preOrder.length - rootIndexInvin - 1]; dfsRightVinOrder = Arrays.copyOfRange(vinOrder, rootIndexInvin + 1, vinOrder.length); dfsRightPreOrder = Arrays.copyOfRange(preOrder, 1 + rootIndexInvin, preOrder.length); binaryTree.left = reConstructBinaryTree(dfsLeftPreOrder, dfsLeftVinOrder); binaryTree.right = reConstructBinaryTree(dfsRightPreOrder, dfsRightVinOrder); return binaryTree; } }