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;
        }
    }
  • 相关阅读:
    美团大数据质量监控平台
    大数据理论体系总结--数据仓库管理与全链路数据体系
    spark图解
    forEach、map、filter、find、sort、some等易错点整理
    轮播图(jQuery)
    js 数组、对象转json 以及 json转 数组、对象
    jquery 获取元素(父节点,子节点,兄弟节点),元素筛选
    前端面试总结 (转 0C°)
    Git入门看这一篇就够了! (转)
    Rotating Scoreboard POJ
  • 原文地址:https://www.cnblogs.com/nlw-blog/p/12410053.html
Copyright © 2011-2022 走看看