题解 | #重建二叉树#

重建二叉树

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

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    HashMap<Integer,Integer> hash = new HashMap<>();
    public TreeNode reConstructBinaryTree(int [] pre,int [] vin) {
        int n = vin.length;
        for(int i = 0;i < n;i++){
            hash.put(vin[i],i);
        }
        TreeNode root = dfs(pre,vin,0,n-1,0,n-1);
        return root;
    }
    public TreeNode dfs(int[] pre,int[] vin,int prel,int prer,int vinl,int vinr){
        if(prel > prer){
            return null;
        }
        int rootval = pre[prel];
        TreeNode root = new TreeNode(rootval);
        int vinroot = hash.get(rootval);
        int treesize =vinroot - vinl;
        root.left = dfs(pre,vin,prel+1,prel+treesize,vinl,vinroot-1);
        root.right = dfs(pre,vin,prel+treesize+1,prer,vinroot+1,vinr);
        return root;
    }
}
全部评论

相关推荐

11-03 14:57
西北大学 营销
Belltrix:其实就是每根转动一定的角度
点赞 评论 收藏
分享
12-27 22:46
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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