题目考察的知识点

考察通过中序和后序遍历重建二叉树

题目解答方法的文字分析

递归算法不断调用去重建,需要先找到根节点,这个可以每次从后续遍历最后一个节点取出,然后用这个节点去中序序列中找到划分点,划分新的中序序列和后续序列,然后递归使用函数重建左右子树

本题解析所用的编程语言

使用Java语言解答

完整且正确的编程代码

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param inOrder int整型一维数组 
     * @param postOrder int整型一维数组 
     * @return TreeNode类
     */
    public TreeNode buildTree (int[] inOrder, int[] postOrder) {
        // write code here
        if(postOrder==null||inOrder==null||postOrder.length==0||inOrder.length==0) return null;
        TreeNode root = new TreeNode(postOrder[postOrder.length-1]); //后续最后一个元素为根节点
        int index = 0;
        for(int i=0; i<inOrder.length;i++){
            if(inOrder[i]==root.val) break;//找到划分点
            index++;
            
        }
        root.left = buildTree(Arrays.copyOfRange(inOrder,0,index),Arrays.copyOfRange(postOrder,0,index));  //重建左子树
        root.right = buildTree(Arrays.copyOfRange(inOrder,index+1,inOrder.length),Arrays.copyOfRange(postOrder,index,inOrder.length-1)); //重建右子树
        return root;
    }
}