package org.example.interview.practice; /** * @author xianzhe.ma * @date 2021/9/7 */ public class NC_12_reConstructBinaryTree { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { return dfs(0, 0, in.length - 1, pre, in); } public TreeNode dfs(int preStart, int inStart, int inEnd, int[] preorder, int[] inorder) { if (preStart > preorder.length - 1 || inStart > inEnd) { return null; } //创建结点 TreeNode root = new TreeNode(preorder[preStart]); int index = 0; //找到当前节点root在中序遍历中的位置,然后再把数组分两半 for (int i = inStart; i <= inEnd; i++) { if (inorder[i] == root.val) { index = i; break; } } root.left = dfs(preStart + 1, inStart, index - 1, preorder, inorder); root.right = dfs(preStart + index - inStart + 1, index + 1, inEnd, preorder, inorder); return root; } public static class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } }