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 }
  • 相关阅读:
    关于 数据文件自增长 的一点理解
    Oracle 9i 升级后 OLAP Catalog 组件 Invalid
    Linux 查看软件位置的命令
    Oracle RAC + Data Guard 环境搭建
    Oracle 9.2.0.8 ODCIXXX 对象无效
    Oracle 9.2.0.8 ODCIXXX 对象无效
    Oracle 索引可以比表大
    Oracle Data Guard 环境下的数据库升级方法
    RAC ONS 不能启动
    Unix 和 Linux 双机热备 概念
  • 原文地址:https://www.cnblogs.com/ygh1229/p/5734533.html
Copyright © 2011-2022 走看看