题解 | #最长不含重复字符的子字符串#

重建二叉树

http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

解题思路

通过二叉树的前序和中序来构建二叉树, 通过规则可以知道,前序的某一位置的值,该值在中序遍历中其左部分为其左孩子的区域,右部分为右孩子的区域,可以一个hashmap 将中序遍历的每个值对应的位置进行保存。不断通过递归来重建二叉树。但有一个难点就是确定遍历的区域范围。难点递归子问题的递归区域范围的确定。


HashMap<Integer,Integer> hashMap=new HashMap<>();
public TreeNode reConstructBinaryTree(int [] pre, int [] in) {
    int preLength=pre.length;
    int inLength=in.length;
    if(preLength!=inLength){
        return null;
    }
    for(int i=0;i<inLength;i++){
        //存储中序遍历中的
        hashMap.put(in[i],i);
    }
    TreeNode head=dfs(pre,in,0,preLength-1,0,inLength-1);
    return head;
}

public TreeNode dfs(int [] pre,int [] in,int pl,int pr,int vl,int vr){
    if(pl>pr){
        return null;
    }
    // 获得当前区域前序遍历第一个元素
    int k = hashMap.get(pre[pl]);
    TreeNode treeNode = new TreeNode(pre[pl]);
    TreeNode left=dfs(pre,in,pl+1,pl+k-vl,vl,k-1);
    TreeNode right=dfs(pre,in,pl+k-vl+1,pr,k+1,vr);
    treeNode.left=left;
    treeNode.right=right;
    return treeNode;
}
全部评论

相关推荐

09-23 14:45
贵州大学 财务
牛客68802037...:怎么9.2佬人手一个中信证券实习
点赞 评论 收藏
分享
09-22 11:42
门头沟学院 Java
现在还很懵,不是什么很好的工资,但是很怕拒绝了秋招就没有offer了试用期3个月&nbsp;无责底薪7k➕绩效&nbsp;转正8k&nbsp;base南昌&nbsp;没有住房补贴&nbsp;餐补&nbsp;不知道作为一个应届生这个待遇怎么样?
白火同学:南昌能给到8k,还有绩效其实不错了。因为南昌房租不高,我22年在谢家村那边市中心租房只要1k就能租到还不错的房子,其他消费也是正常省会水平,所以南昌8k ≈ 一线10k上下吧。双非应届校招能拿这个薪资水平确实可以了,唯一不足的就是南昌IT行业整体不太行,以后跳槽多少有点不方便。
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务