zoukankan      html  css  js  c++  java
  • 通过两种深度优先遍历方式重建二叉树或者得到其余一种遍历方式

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

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

    基本思想

      中序遍历的第一个节点是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 }

     

     

  • 相关阅读:
    Spring Boot中常用的三个注解
    Idea插件
    Java微服务 在 Linux 环境启停Shell脚本
    注解
    Oracle树状结构层级查询
    zabbix安装部署(server部分)
    zabbix监控系统客户端安装
    Windows 用bat脚本带配置启动redis,并用vb脚本使其在后台运行。
    svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
    PHP网页显示乱码问题总结
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9058536.html
Copyright © 2011-2022 走看看