1、已知前序和中序,恢复二叉树的结构。
思路:根据前序和中序的规律,可以求出递归求解的时候,下一次递归的入口。
public static TreeNode buildTree(int[] preorder, int[] inorder){
int preLen = preorder.length;
int inLen = inorder.length;
if (preLen != inLen){
throw new RuntimeException("非法参数");
}
// 用来存储中序的下标与索引的关系,可以快速在中序找到根节点的下标
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < inLen; i++){
map.put(inorder[i], i);
}
return buildTree(preorder, 0, preLen - 1, map, 0, inLen - 1);
}
/**
*
* @param preorder 前序遍历序列
* @param preLeft 前序遍历序列子区间的左边界,可以取得
* @param preRight 前序遍历序列子区间的右边界,可以取到
* @param map 在中序遍历序列里,数值有下标的对应关系
* @param inLeft