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

    题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果都不含重复的数字。例如输入前序遍历序列{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 }

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

    待细细琢磨。

  • 相关阅读:
    PHP Laravel Install and Quickstart
    PHP Composer
    PHP学习 Cookie和Session
    PHP学习 Object Oriented 面向对象 OO
    PHP学习 例外和错误处理
    PHP学习 文件访问和写入
    PHP学习 函数 function
    PHP学习 流程控制和数组
    修改docker镜像地址为阿里云
    通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态
  • 原文地址:https://www.cnblogs.com/10081-AA/p/10533603.html
Copyright © 2011-2022 走看看