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

    题目描述

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
     1 public class Main04 {
     2 
     3     //输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
     4     //假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
     5     //例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
     6     
     7     
     8      public class TreeNode {
     9          int val;
    10          TreeNode left;
    11          TreeNode right;
    12          TreeNode(int x) { val = x; }
    13      }
    14 
    15     public class Solution {
    16         public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
    17             TreeNode root = new TreeNode(pre[0]);
    18             int len = pre.length;
    19             if (len == 1) {
    20                 root.left = null;
    21                 root.right = null;
    22                 return root;
    23             }
    24             int rootval = root.val;
    25             int i; 
    26             for (i=0;i<len;i++) {
    27                 if (rootval == in[i]) {
    28                     break;
    29                 }
    30             }
    31             if (i > 0) {
    32                 int[] preleft = new int[i];
    33                 int[] inleft = new int[i];
    34                 for (int j=0;j<i;j++) {
    35                     preleft[j] = pre[j+1];
    36                 }
    37                 for (int j=0;j<i;j++) {
    38                     inleft[j] = in[j];
    39                 }
    40                 root.left = reConstructBinaryTree(preleft, inleft);
    41             }else{
    42                 root.left = null;
    43             }
    44             
    45             if(len-i-1 > 0) {
    46                 int[] preright = new int[len-i-1];
    47                 int[] inright = new int[len-i-1];
    48                 
    49                 for(int j=i+1;j<len;j++) {
    50                     preright[j-i-1] = pre[j];
    51                     inright[j-i-1] = in[j];
    52                 }
    53                 root.right = reConstructBinaryTree(preright,inright);
    54             }else {
    55                 root.right = null;
    56             }
    57             return root;
    58         }
    59     }
  • 相关阅读:
    easyui datagrid 编辑器绑定事件
    Java初学(八)
    Java初学(七)
    Java初学(六)
    Java初学(五)
    Java初学(四)
    GCC基本知识
    OpenCL memory object 之 Global memory (2)
    OpenCL memory object 之 Global memory (1)
    OpenCL memory object 之 传输优化
  • 原文地址:https://www.cnblogs.com/strive-19970713/p/11000033.html
Copyright © 2011-2022 走看看