给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:
image

输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]
示例 2:

输入: preorder = [-1], inorder = [-1]
输出: [-1]


递归好理解一些:

class Solution {
	private int preIndex = 0;

	public TreeNode buildTree(int[] preorder, int[] inorder) {
		Map<Integer, Integer> hashMap = new HashMap<>();
		int n = inorder.length;
		for (int i = 0; i < n; i++) {
			hashMap.put(inorder[i], i);
		}
		return buildTree(preorder, 0, n - 1, hashMap);
	}
	public TreeNode buildTree(int[] preorder, int start, int end, Map<Integer, Integer> hashMap) {
		if (start > end) return null;
		int preIndexValue = preorder[preIndex];
		preIndex++;
		int index = hashMap.get(preIndexValue);
		TreeNode root = new TreeNode(preIndexValue);
		root.left = buildTree(preorder, start, index - 1, hashMap);
		root.right = buildTree(preorder, index + 1, end, hashMap);
		return root;
	}
}
posted on 2025-07-17 20:18  caoshikui  阅读(7)  评论(0)    收藏  举报