题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
示例
题解
这道题理解的一般,具体注释详细写在了代码里。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int[] preorder;
int[] inorder;
Map<Integer, Integer> map;
public TreeNode buildTree(int[] preorder, int[] inorder) {
this.preorder = preorder;
this.inorder = inorder;
this.map = new HashMap();
for (int i = 0; i < inorder.length; i++) {
map.put(inorder[i], i);
}
return build(0, 0, inorder.length - 1);
}
/**
* @param root 根节点在前序中的下标
* @param left 本轮中序的左起点
* @param right 本轮中序的右起点
* @return
*/
public TreeNode build(int rootPre, int begin, int end) {
if (end < begin) {
return null;
}
int root = preorder[rootPre];
int rootIndex = map.get(root);
TreeNode rootNode = new TreeNode(root);
rootNode.left = build(rootPre + 1, begin, rootIndex - 1);
rootNode.right = build(rootPre + rootIndex - begin + 1, rootIndex + 1, end);
return rootNode;
}
}
性能