二叉树前序遍历特点:
1. 遍历根节点;
2. 递归遍历根节点左子树;
3. 递归遍历根节点右子树;
二叉树中序遍历特点:
1. 递归遍历根节点左子树;
2. 遍历根节点;
3. 递归遍历根节点右子树;
依据前序、中序遍历结果建立二叉树代码如下:
class Solution {
// 为了降低在中序遍历结果集中搜索当前根节点的时间
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
public TreeNode buildTree(int[] preorder, int[] inorder) {
// 将中序的位置存入
for(int i=0;i<inorder.length;i++){
map.put(inorder[i],i);
}
TreeNode node = build(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1);
return node;
}
// 递归实现
private TreeNode build(int[] preorder, int[] inorder, int preL, int preR, int inL, int inR){
if(preL>preR) return null;
TreeNode root = new TreeNode(preorder[preL]); // 建立当前根节点
int inIndex = map.get(preorder[preL]); // 根节点在中序中的位置
int leftLen = inIndex - inL; // 左子树的长度
root.left = build(preorder, inorder, preL+1, preL+leftLen, inL, inIndex-1);
root.right = build(preorder, inorder, preL+leftLen+1, preR, inIndex+1, inR);
return root;
}
}