重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

算法解析:参照   https://www.bilibili.com/video/BV1m7411V7TG?t=377

 1 /**
 2  * Definition for binary tree
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 import java.util.Arrays;
11 public class Solution {
12    public TreeNode reConstructBinaryTree(int[] pre, int[] in) {
13         if (pre.length == 0 || in.length == 0) {
14             return null;
15         }
16         TreeNode root = new TreeNode(pre[0]);
17         for (int i = 0; i < in.length; i++) {
18             // 在中序中找到前序的根
19             if (pre[0] == in[i]) {
20                 /*
21                     这里left与right的参数的大小互补
22                  */
23                 root.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, i + 1),
24                         Arrays.copyOfRange(in, 0, i));
25                 root.right = reConstructBinaryTree(Arrays.copyOfRange(pre, i + 1, pre.length),
26                         Arrays.copyOfRange(in, i + 1, in.length));
27                 break;
28             }
29         }
30         return root;
31     }
32 }

 

posted @ 2020-04-25 16:44  王余阳  阅读(178)  评论(0)    收藏  举报