首页 > 其他 > 详细

剑指offer 4. 重建二叉树

时间:2020-02-24 15:43:44      阅读:82      评论:0      收藏:0      [点我收藏+]

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. 分析

根据中序遍历和前序遍历可以确定二叉树,具体过程为:

    1. 根据前序序列第一个结点确定根结点
    2. 根据根结点在中序序列中的位置分割出左右两个子序列
    3. 对左子树和右子树分别递归使用同样的方法继续分解
 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 }

 

剑指offer 4. 重建二叉树

原文:https://www.cnblogs.com/hi3254014978/p/12357162.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!