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