# 从中序与后序遍历序列构造二叉树

<p>根据一棵树的中序遍历与后序遍历构造二叉树。</p>

<p><strong>注意:</strong><br>
你可以假设树中没有重复的元素。</p>

<p>例如，给出</p>

<pre>中序遍历 inorder =&nbsp;[9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]</pre>

<p>返回如下的二叉树：</p>

<pre>    3
   / \
  9  20
    /  \
   15   7
</pre>


## template

```java
public class TreeNode {
	int val;
	TreeNode left;
	TreeNode right;

	TreeNode(int x) {
		val = x;
	}
}

class Solution {
	public TreeNode buildTree(int[] inorder, int[] postorder) {
		return helper(inorder, postorder, postorder.length - 1, 0, inorder.length - 1);
	}

	public TreeNode helper(int[] inorder, int[] postorder, int postEnd, int inStart, int inEnd) {
		if (inStart > inEnd) {
			return null;
		}

		int currentVal = postorder[postEnd];
		TreeNode current = new TreeNode(currentVal);

		int inIndex = 0;
		for (int i = inStart; i <= inEnd; i++) {
			if (inorder[i] == currentVal) {
				inIndex = i;
			}
		}
		TreeNode left = helper(inorder, postorder, postEnd - (inEnd - inIndex) - 1, inStart, inIndex - 1);
		TreeNode right = helper(inorder, postorder, postEnd - 1, inIndex + 1, inEnd);
		current.left = left;
		current.right = right;
		return current;
	}
}

```

## 答案

```java

```

## 选项

### A

```java

```

### B

```java

```

### C

```java

```