
代码实现:/*public class TreeNode { String value; TreeNode left; TreeNode right; TreeNode(String x) { value = x; }} */import java.util.HashMap;/** * @Author: deemoHui * @Description: 根据二叉树的先序遍历和中序遍历求后序遍历 * @Date Created in 2020-09-07 10:50 * @Modified By: */public class PreInToPost{ public static void main(String[] args) { String[] preorder = new String[]{"A","D","C","E","F","G","H","B"}; String[] inorder = new String[]{"C","D","F","E","G","H","A","B"}; TreeNode root = new BuildTree().buildTree(preorder, inorder); System.out.print("后序遍历结果:"); postOrder(root); } public static void postOrder(TreeNode node){ if(node==null) { return; } postOrder(node.left); postOrder(node.right); System.out.print(node.value); }}class BuildTree { HashMap<String, Integer> map = new HashMap<>(); String[] po; public TreeNode buildTree(String[] preorder, String[] inorder) { po = preorder; for(int i = 0; i < inorder.length; i++) { map.put(inorder[i], i); } return recur(0, 0, inorder.length - 1); } TreeNode recur(int pre_root, int in_left, int in_right) { if(in_left > in_right) { return null; } TreeNode root = new TreeNode(po[pre_root]); int i = map.get(po[pre_root]); root.left = recur(pre_root + 1, in_left, i - 1); root.right = recur(pre_root + i - in_left + 1, i + 1, in_right); return root; }}

更好的解释见:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/solution/mian-shi-ti-07-zhong-jian-er-cha-shu-di-gui-fa-qin/