题目考察的知识点
考察通过中序和后序遍历重建二叉树
题目解答方法的文字分析
递归算法不断调用去重建,需要先找到根节点,这个可以每次从后续遍历最后一个节点取出,然后用这个节点去中序序列中找到划分点,划分新的中序序列和后续序列,然后递归使用函数重建左右子树
本题解析所用的编程语言
使用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; } }