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

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

    开始没写出来,一直不ac,后来找了个大牛还是厉害这代码;

    /**
    * Definition for binary tree
    * public class TreeNode {
    * int val;
    * TreeNode left;
    * TreeNode right;
    * TreeNode(int x) { val = x; }
    * }
    */
    public class Solution {
      public TreeNode reConstructBinaryTree(int [] pre,int [] in) {

      //开始调用的同时,直接传0,将先序第一个元素作为根节点运算
        TreeNode root = reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
        return root;
      }

    private TreeNode reConstructBinaryTree(int [] pre,int startPre,int endPre,int [] in,int startIn,int endIn) {


      //不能越界
      if(startPre > endPre || startIn > endIn){
        return null;
      }
      

      //重建开始,为当前根节点赋值
      TreeNode root=new TreeNode(pre[startPre]);

      for(int i = startIn; i <= endIn; i++)

        //将先序给的根节点在中序中进行遍历找到此根节点
        if(in[i] == pre[startPre]){

          

          //分树阶段。也就是递归找根,分树阶段;(这种代码一般是固定的)

         注意下标分析;

        root.left = reConstructBinaryTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1);
        root.right = reConstructBinaryTree(pre,i-startIn+startPre+1,endPre,in,i+1,endIn);

        break;
      }

      return root;
      }
    }

  • 相关阅读:
    java文件下载
    java中StringUtils中isEmpty 和isBlank的区别
    spring boot jsp页面
    hello,word!
    maven compile启动报错
    java File类常用方法
    spring boot 启动问题
    /proc/sys/net/ipv4/下各项的意义
    Zend Framework 中 htaccess 的标准配置
    三种识别目标为移动设备的方法
  • 原文地址:https://www.cnblogs.com/wzQingtTian/p/10661526.html
Copyright © 2011-2022 走看看