zoukankan      html  css  js  c++  java
  • 重建二叉树

    题目描述

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
     
     
    根据前序和中序确定二叉树,根据它们的特性,可知前序第一个元素是根节点,和中序对应找出各自的左子树和右子树。
    然后递归循环,在找相同的元素,此为子树的根节点,然后继续操作,直到子树为空。
     
      Arrays.copyOfRange(byte[] original, int from, int to)是对数组的指定位置的复制。
     
    下面是实现的代码:
     
     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.*;
    11 
    12 public class Solution {
    13     public TreeNode reConstructBinaryTree(int[] pre, int[] in) {
    14         if (pre == null || in == null || pre.length == 0 || in.length == 0) {
    15             return null;
    16         }
    17         TreeNode root = construct(pre, in);
    18         return root;
    19     }
    20 
    21     private TreeNode construct(int[] pre, int[] in) {
    22         int length = pre.length;
    23         if (length == 0)
    24             return null;
    25         TreeNode root = new TreeNode(pre[0]);
    26         int i = 0;
    27         for (; i < length; i++) {
    28             if (in[i] == pre[0])
    29                 break;
    30         }
    31         if (i == length)
    32             i--;
    33         int[] leftPre = Arrays.copyOfRange(pre, 1, i + 1);
    34         int[] rightPre = Arrays.copyOfRange(pre, i + 1, length);
    35         int[] leftIn = Arrays.copyOfRange(in, 0, i);
    36         int[] rightIn = Arrays.copyOfRange(in, i + 1, length);
    37         root.left = construct(leftPre, leftIn);
    38         root.right = construct(rightPre, rightIn);
    39         return root;
    40     }
    41 }
  • 相关阅读:
    有趣的网站
    Python-Day2
    C# EF增删改查
    LINQ教程
    命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)
    Log4Net组件的应用详解
    log4net应用
    Select count(*)和Count(1)的区别和执行方式
    Ms sql 2005 中的bit 数据类型
    关于CLR、CIL、CTS、CLS、CLI、BCL和FCL
  • 原文地址:https://www.cnblogs.com/ygh1229/p/5734533.html
Copyright © 2011-2022 走看看