• 通过两种深度优先遍历方式重建二叉树或者得到其余一种遍历方式


      重建二叉树的方法有很多种,但是并不是通过任意两种深度优先遍历方式都可以重建二叉树,它也是有限制的。

      通过前序+中序、后序+中序、层序+中序这三种方式是可以重建二叉树的,但是通过前序+后序、前序+层序、后序+层序这三种方式是不能重建二叉树的。本文重点讲解通过前序+中序的方式重建二叉树的基本思想以及具体的代码实现。

    基本思想

      中序遍历的第一个节点是root节点,在前序遍历中找到root, root的前半段就是root的左子树的前序遍历(长度M), root的后半段就是root的右子树的前序遍历(长度N),因此在前序遍历种,root之后长度M的序列是root的左子树的中序遍历,再后面N个就是root右子树的中序遍历,重复上述过程即可。

    代码实现

     1 /**
     2  * 二叉树节点的定义
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class reConstruct{
    11     public TreeNode reConstructBinaryTree(int [] pre, int [] in){
    12         TreeNode treeNode = reConstruct(pre,0,pre.length-1,in,0,in.length-1);
    13         return treeNode;
    14     }
    15 
    16     private TreeNode reConstruct(int[] pre,int startPre,int endPre,int[] in,int startIn,int endIn){
    17         if(startPre>endPre || startIn>endIn){
    18             return null;
    19         }
    20         TreeNode treeNode = new TreeNode(pre[startPre]);
    21         for(int i=startIn;i<=endIn;i++){
    22             if(in[i]==pre[startPre]){
    23                 treeNode.left = reConstruct(pre,startPre+1,startPre+i-startIn,in,startIn,i-1);
    24                 treeNode.right = reConstruct(pre,startPre+i-startIn+1,endPre,in,i+1,endIn);
    25                 break;
    26             }
    27         }
    28         return treeNode;
    29     }
    30 }

     

     

  • 相关阅读:
    大数据的起步:初学者
    接触区块链
    学习开始了,博客开始了
    hadoop分布式的搭建过程
    Java笔试题
    JavaSCript全局变量与局部变量
    OSGI
    restful
    jersey
    JSP+Servlet+Mybits小例子
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9058536.html
Copyright © 2020-2023  润新知