重建二叉树

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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     }
原文地址:https://www.cnblogs.com/strive-19970713/p/11000033.html