题解 | #牛群的树形结构重建#

牛群的树形结构重建

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;
        
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务