解题思路 :
代码实现 :
//中序和后序遍历构造二叉树
public TreeNode buildTree(int[] inorder, int[] postorder) {
i = postorder.length - 1;
return createTree(0,inorder.length-1,inorder,postorder);
}
public TreeNode createTree(int start, int end, int[] inorder, int[] postorder) {
if (start > end) {
return null;
}
TreeNode root = new TreeNode(postorder[i]);
int index = findIndex(start,end,inorder,postorder);
if (index == -1) {
return null;
}
root.right = createTree(index+1,end,inorder,postorder);
root.left = createTree(start,index-1,inorder,postorder);
return root;
}
private int findIndex(int start, int end, int[] inorder, int[] postorder) {
for (int j = end; j >= start; j--) {
if (inorder[j] == postorder[i]) {
i--;
return j;
}
}
return -1;
}
有问题可以私信我~