题解 | #牛群的树形结构重建#
牛群的树形结构重建
https://www.nowcoder.com/practice/bcabc826e1664316b42797aff48e5153
考察树的构建。通过中序后续序列构建二叉树,每次递归着从后续序列最后一位取到当前根节点后,根据此节点划分此时的中序序列和后续序列,递归构建这个根节点的左右子树,依次构建每个节点,生成完整的树。
完整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;
}
}


