• 重建二叉树


    题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    解该题目之前,我先来复习一下二叉树的遍历:

    详见维基百科

    深度优先遍历 - 前序遍历

    深度优先遍历 - 中序遍历

     深度优先搜索 - 后序遍历

    广度优先遍历 - 层次遍历

      

     F, B, A, D, C, E, G, I, H.  A, B, C, D, E, F, G, H, I.  A, C, E, D, B, H, I, G, F. F, B, G, A, D, I, C, E, H.

    首先是Java中的Arrays.copyOfRange()方法,该方法首先要import java.util.*;

    Arrays.copyOfRange(T[] original, int from,int to)

    即将一个原始的数组original,从小标from开始复制,复制到小标to,生成一个新的数组。

    这里数组包括from,但是不包括to。java和C下标从0开始。

     1 import java.util.*;
     2 /**
     3  * Definition for binary tree
     4  * public class TreeNode {
     5  *     int val;
     6  *     TreeNode left;
     7  *     TreeNode right;
     8  *     TreeNode(int x) { val = x; }
     9  * }
    10  */
    11 public class Solution {
    12     public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
    13         if ((pre.length ==0)||(in.length == 0)){
    14             return null;
    15         }
    16         TreeNode node = new TreeNode(pre[0]);
    17         for (int i = 0; i<in.length; i++){
    18             if (pre[0] == in[i]){
    19                 node.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1),Arrays.copyOfRange(in,0,i));
    20                 node.right = reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length),Arrays.copyOfRange(in,i+1,in.length));
    21             }
    22         }
    23         return node;
    24     }
    25 }

    采用类似于递归的方法进行树的重建,即利用了数遍历的规律。

    待细细琢磨。

  • 相关阅读:
    UVALive 8519 Arrangement for Contests 2017西安区域赛H 贪心+线段树优化
    UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset
    JAVA导出EXCEL——POI(转)
    Oracle导入导出——windows命令行形式
    miniUI ExcelExport导出JAVA实现
    JSONObject遍历获取键值
    wrong number of arguments
    JAVA批量修改文件名
    miniUI DataGrid编辑后事件代码示例
    oracle10g没有行列转换函数的替代方法(转)
  • 原文地址:https://www.cnblogs.com/10081-AA/p/10533603.html
Copyright © 2020-2023  润新知