class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class BinaryCode { public static void main(String[] args) { int[] pre = {1,2,4,7,3,5,6,8}; int[] in = {4,7,2,1,5,3,8,6}; TreeNode treeNode = reConstructBinaryTree(pre, in); System.out.println(treeNode.toString()); } public static TreeNode reConstructBinaryTree(int [] pre, int [] in) { if(pre == null || pre.length == 0){ return null; } int root = pre[0]; TreeNode node = new TreeNode(root); int rootIndex = -1; for (int i = 0; i < in.length; i++) { if(in[i] == root){ rootIndex = i; } } if(rootIndex < 0){ return null; } int[] leftInTree = Arrays.copyOfRange(in,0,rootIndex); if(leftInTree.length > 0){ int[] leftPreTree = Arrays.copyOfRange(pre,1,leftInTree.length+1); if(leftPreTree.length > 0){ node.left = reConstructBinaryTree(leftPreTree,leftInTree); } } int[] rightInTree = Arrays.copyOfRange(in,rootIndex+1,in.length); if(rightInTree.length>0){ int[] rihtPreTree = Arrays.copyOfRange(pre,pre.length-rightInTree.length,pre.length); if(rihtPreTree.length > 0){ node.right = reConstructBinaryTree(rihtPreTree,rightInTree); } } return node; } }
原文:https://www.cnblogs.com/yongjixl/p/11959250.html