题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
1 public class Main04 { 2 3 //输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 4 //假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 5 //例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 6 7 8 public class TreeNode { 9 int val; 10 TreeNode left; 11 TreeNode right; 12 TreeNode(int x) { val = x; } 13 } 14 15 public class Solution { 16 public TreeNode reConstructBinaryTree(int [] pre,int [] in) { 17 TreeNode root = new TreeNode(pre[0]); 18 int len = pre.length; 19 if (len == 1) { 20 root.left = null; 21 root.right = null; 22 return root; 23 } 24 int rootval = root.val; 25 int i; 26 for (i=0;i<len;i++) { 27 if (rootval == in[i]) { 28 break; 29 } 30 } 31 if (i > 0) { 32 int[] preleft = new int[i]; 33 int[] inleft = new int[i]; 34 for (int j=0;j<i;j++) { 35 preleft[j] = pre[j+1]; 36 } 37 for (int j=0;j<i;j++) { 38 inleft[j] = in[j]; 39 } 40 root.left = reConstructBinaryTree(preleft, inleft); 41 }else{ 42 root.left = null; 43 } 44 45 if(len-i-1 > 0) { 46 int[] preright = new int[len-i-1]; 47 int[] inright = new int[len-i-1]; 48 49 for(int j=i+1;j<len;j++) { 50 preright[j-i-1] = pre[j]; 51 inright[j-i-1] = in[j]; 52 } 53 root.right = reConstructBinaryTree(preright,inright); 54 }else { 55 root.right = null; 56 } 57 return root; 58 } 59 }