首页 > 编程语言 > 详细

算法题--01

时间:2020-09-02 22:34:11      阅读:50      评论:0      收藏:0      [点我收藏+]

01.给出二叉树的 前序数组,和中序数组,请还原二叉树

   思路:按照笔算的思路,从前序节点开始遍历,找到对应节点在中序节点的位置,然后判断出哪些节点是该节点是左子节点,哪些是右子节点,中序又点二分的味道。

    同时,根据中序区分左右,前序遍历的时候,需要跳过已经处理过的节点

技术分享图片
import java.util.HashMap;
public class Solution {
    public int[] pre;
    public int[] mid;
    public HashMap<Integer ,Integer> map=new HashMap<>();
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        this.pre=pre;
        this.mid=in;
        for(int i=0;i<in.length;i++){
            map.put(in[i],i);
        }
        
        return pre(0,pre.length-1,0,in.length-1);
    }
    public TreeNode pre(int pi,int pj,int mi,int mj){
        if(mi>mj||pi>pj)
            return null;
        TreeNode node=new TreeNode(pre[pi]);
        int index=map.get(pre[pi]);
        node.left=pre(pi+1,pi+index-mi,mi,index-1);
        node.right=pre(pi+index-mi+1,pj,index+1,mj);
        return node;
        
    }
}
01

 

算法题--01

原文:https://www.cnblogs.com/yidiandianwy/p/13603898.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!