LeetCode-Algorithms-[Mid]面试题07. 重建二叉树

面试题07. 重建二叉树

public class Interview07 {
	private HashMap<Integer, Integer> map;
	private int n;
	private int[] pre;

	public TreeNode buildTree(int[] preorder, int[] inorder) {
		n = inorder.length;
		map = getMap(inorder);
		pre = preorder;
		TreeNode res = buildTree(0, 0, n - 1);
		return res;
	}

	private TreeNode buildTree(int b1, int b2, int e2) {
		if (b2 > e2) {
			return null;
		}
		int val = pre[b1];
		TreeNode res = new TreeNode(val);
		int index = map.get(val);
		res.left = buildTree(b1 + 1, b2, index - 1);
		res.right = buildTree(b1 + index - b2 + 1, index + 1, e2);
		return res;
	}

	private HashMap<Integer, Integer> getMap(int[] inorder) {
		HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
		for (int i = 0; i < n; ++i) {
			map.put(inorder[i], i);
		}
		return map;
	}
}
发布了272 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/m0_37302219/article/details/105483591