4. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回
解法来源:https://blog.nowcoder.net/n/2cbe9f458bd74be1a910aa6d071aa411?f=comment
根据中序遍历和前序遍历可以确定二叉树,具体过程为:
1 import java.util.Arrays; 2 public class Solution { 3 // 递归将中序遍历和前序遍历数组变成分成子树的 前序 遍历和 中序遍历的数组 4 public TreeNode reConstructBinaryTree(int [] pre,int [] in) { 5 if(pre.length == 0 || in.length == 0){ 6 return null; 7 } 8 // 创建根节点 9 TreeNode root = new TreeNode(pre[0]); 10 11 // 从中序遍历中找到根节点, 12 for(int i = 0; i < in.length; i++){ 13 if(in[i] == pre[0]){ 14 // 左子树,注意copyOfRange的区间范围,左闭右开 15 root.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, i + 1), Arrays.copyOfRange(in, 0, i)); 16 // 右子树 17 root.right = reConstructBinaryTree(Arrays.copyOfRange(pre, i + 1, pre.length), Arrays.copyOfRange(in, i + 1, in.length)); 18 } 19 } 20 return root; 21 } 22 }
原文:https://www.cnblogs.com/hi3254014978/p/12357162.html