题目链接:construct-binary-tree-from-inorder-and-postorder-traversal
import java.util.Arrays;
//根据中序和后序遍历构建二叉树
/**
*
* Given Inorder and Postorder traversal of a tree, construct the binary tree.
*
* Note: You may assume that duplicates do not exist in the tree.
*
*/
public class ConstructBinaryTreeFromInorderAndPostorderTraversal {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
// 202 / 202 test cases passed.
// Status: Accepted
// Runtime: 390 ms
// Submitted: 0 minutes ago
public TreeNode buildTree(int[] inorder, int[] postorder) {
int len = postorder.length;
if (len > 0) {
TreeNode root = new TreeNode(postorder[len - 1]);
int rootIndex = 0;
// 找到根节点在中序遍历中的位置
for (; rootIndex < len; rootIndex++) {
if (inorder[rootIndex] == postorder[len - 1]) {
break;
}
}
// 分别构建左右子树
root.left = buildTree(Arrays.copyOfRange(postorder, 0, rootIndex),
Arrays.copyOfRange(inorder, 0, rootIndex));
root.right = buildTree(Arrays.copyOfRange(postorder, rootIndex + 1, len),
Arrays.copyOfRange(inorder, rootIndex, len - 1));
return root;
} else {
return null;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}