题目

image.png

思路

  • 根据前序遍历来构造二叉树,根据中序遍历来限定左右子树的范围

    代码

    1. public TreeNode buildTree(int[] preorder, int[] inorder) {
    2. return buildTree(preorder, 0, preorder.length - 1, inorder, 0, inorder.length);
    3. }
    4. private TreeNode buildTree(int[] preorder, int pStart, int pEnd, int[] inorder,
    5. int iStart, int iEnd) {
    6. if (pStart > pEnd) return null;
    7. TreeNode root = new TreeNode(preorder[pStart]);
    8. int i, range;
    9. for (i = iStart; i < iEnd; i++) {
    10. if (inorder[i] == preorder[pStart]) break;
    11. }
    12. range = i - iStart;
    13. root.left = buildTree(preorder, pStart + 1, pStart + range, inorder, iStart, i);
    14. root.right = buildTree(preorder, pStart + range + 1, pEnd, inorder, i + 1, iEnd);
    15. return root;
    16. }

    从前序与中序遍历序列构造二叉树