美文网首页
剑指 offer 学习之重建二叉树

剑指 offer 学习之重建二叉树

作者: Kevin_小飞象 | 来源:发表于2020-03-26 09:08 被阅读0次

    题目描述

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    题目链接:牛客网

    解题思路

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    import java.util.*;
    public class Solution {
        
        // 缓存中序遍历数组每个值对应的索引
        private Map<Integer, Integer> indexForInOrders = new HashMap<>();
    
        public TreeNode reConstructBinaryTree(int[] pre, int[] in) {
            for (int i = 0; i < in.length; i++) {
                indexForInOrders.put(in[i], i);
            }
            
            return reConstructBinaryTree(pre, 0, pre.length - 1, 0);
        }
    
        private TreeNode reConstructBinaryTree(int[] pre, int preL, int preR, int inL) {
            if (preL > preR) {
                return null;
            }
            
            TreeNode root = new TreeNode(pre[preL]);
            int inIndex = indexForInOrders.get(root.val);
            int leftTreeSize = inIndex - inL;
            root.left = reConstructBinaryTree(pre, preL + 1, preL + leftTreeSize, inL);
            root.right = reConstructBinaryTree(pre, preL + leftTreeSize + 1, preR, inL + leftTreeSize + 1);
            return root;
        }
    }
    

    测试结果

    image.png

    相关文章

      网友评论

          本文标题:剑指 offer 学习之重建二叉树

          本文链接:https://www.haomeiwen.com/subject/iwdxuhtx.html