中序和后序构建二叉树

题目描述

Given inorder and postorder traversal of a tree, construct the binary tree.

题目解答

解题思路

  1. 在inorder找到root,然后划分左右
  2. 递归构建

代码实现

public class ConstructTreeFromInAndPost {

    public TreeNode buildTree(int[] inorder, int[] postorder) {
        if(inorder == null || postorder == null || inorder.length != postorder.length || inorder.length == 0)
            return null;
        return buildTreeCore(inorder, 0, inorder.length-1, postorder, 0, postorder.length-1);
    }

    public TreeNode buildTreeCore(int[] inorder, int s1, int e1, int[] postorder, int s2, int e2) {

        if(s1 > e1 || s2 > e2)
            return null;
        TreeNode root = new TreeNode(postorder[e2]);

        int rootIndex = -1;
        for(int i = s1; i <= e1; i++){
            if(inorder[i] == root.val){
                rootIndex = i;
                break;
            }
        }
        if(rootIndex == -1)
            return null;
        int leftSize = rootIndex - s1;
        int rightSize = e1 - rootIndex;
        root.left = buildTreeCore(inorder, s1, rootIndex-1, postorder, s2, s2+leftSize-1);
        root.right = buildTreeCore(inorder, rootIndex+1, e1, postorder, e2-rightSize, e2-1);
        return root;
    }

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
            val = x;
        }
    }

}

你可能感兴趣的:(二叉树)