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;
        }
    }
  • 相关阅读:
    C# — WinForm TCP连接之服务器端
    Linq to SQL — Group by
    pytorch model()[] 模型对象类型
    git官网下载太慢解决方法
    财务分析
    python错题集
    SQL 开窗函数 头尾函数 first_value()/last value()不常用
    徐杨老师的公开课关于敏捷算法
    SQL 开窗函数:range和rows的区别
    SQL开窗函数 row_number(),dense_rank(), rank()
  • 原文地址:https://www.cnblogs.com/nlw-blog/p/12410053.html
Copyright © 2011-2022 走看看