zoukankan      html  css  js  c++  java
  • 重建二叉树 --剑指offer

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

    思路 :前序的第一个结点是根结点,然后在中序找到该结点的下标。可以分出左右子树的前中序。然后递归调用就可以

    public class Solution {
        public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
            if(pre == null || in == null || pre.length != in.length){
                return null;
            }
            //建立根结点
            TreeNode treeNode=new TreeNode(pre[0]);
            int index=0;
            //找到根结点位置在中序的位置,找到左右子树的分开位置记为index
            for(int i =0;i< in.length;i ++){
                if(in[i] == treeNode.val){
                    index=i;
                    break;
                }
            }
            int[] lpre=new int[index];//左子树的前序
            int[] lin=new int[index];//左子树的中序
            int[] rpre=new int[in.length-index-1];//右子树的前序
            int[] rin=new int[in.length-index-1];//右子树的中序
            if(index >0)//判断是否有左子树 只要index的位置不是第一个(下标为0)就是有左子树
            {
                for(int i = 0;i <lpre.length;i ++){
                    lpre[i]=pre[i+1];
                    lin[i]=in[i];
                }
                treeNode.left=reConstructBinaryTree(lpre,lin);
            }else{
                treeNode.left=null;
            }
            if(index < in.length-1)//判断是否有右子树 只要index的位置不是最后一个就是有右子树 index<in.length-1
            {
                for(int i = 0;i < rpre.length;i ++){
                    rpre[i]=pre[index+i+1];
                    rin[i]=in[index+i+1];
                }
                treeNode.right=reConstructBinaryTree(rpre,rin);
            }
            else{
                treeNode.right=null;
            }
            return treeNode;
        }
    }
  • 相关阅读:
    LR实战之Discuz开源论坛——安装及简介
    LR如何利用siteScope监控MySQL性能
    初学SSH(其一)
    使用JUnit单元测试入门
    理解java中【同步】和【死锁】
    LR性能测试应用
    (28)ElasticSearch分布式架构特点
    (27)ElasticSearch 复合查询
    (06)Gitlab设置开启自启动、关闭开机自启动
    (05)安装GitLab
  • 原文地址:https://www.cnblogs.com/nlw-blog/p/12410053.html
Copyright © 2011-2022 走看看