![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/16de3ba54562af414b2c7a8a31edb28c.png)
package com.tree.java;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class seven {
public TreeNode buildTree(int[] inorder, int[] postorder) {
return buildTree1(inorder, 0, inorder.length, postorder, 0, postorder.length);
}
private TreeNode buildTree1(int[] inorder, int inLeft, int inRight, int[] postorder, int postLeft, int postRight) {
if(inRight - inLeft < 1) {
return null;
}
if(inRight - inLeft == 1) {
return new TreeNode(inorder[inLeft]);
}
int rootVal = postorder[postRight - 1];
TreeNode root = new TreeNode(rootVal);
int rootIndex = 0;
for(int i = inLeft; i < inRight; i++) {
if(inorder[i] == rootVal) {
rootIndex = i;
break;
}
}
root.left = buildTree1(inorder, inLeft, rootIndex, postorder, postLeft, postLeft + (rootIndex - inLeft));
root.right = buildTree1(inorder, rootIndex + 1, inRight, postorder, postLeft + (rootIndex - inLeft), postRight - 1);
return root;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6c345149eaedf54e804d2edca3682d24.png)
package com.tree.java;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class seven {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return helper(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
}
private TreeNode helper(int[] preorder, int preLeft, int preRight, int[] inorder, int inLeft, int inRight) {
if(inLeft > inRight || preLeft > preRight) {
return null;
}
int idx = inLeft, val = preorder[preLeft];
TreeNode root = new TreeNode(val);
for(int i = inLeft; i <= inRight; i++) {
if(inorder[i] == val) {
idx = i;
break;
}
}
root.left = helper(preorder, preLeft + 1, preLeft + (idx-inLeft), inorder, inLeft, idx-1);
root.right = helper(preorder, preLeft+(idx - inLeft)+1, preRight, inorder, idx + 1 , inRight);
return root;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}