题解 | #重建二叉树#

重建二叉树

https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

方法一:递归

递归思想:

  1. 已知前序遍历,可以找到二叉树根结点
  2. 已知根结点和中序遍历,可以找到左右子树
  3. 子树根据前序、中序遍历又找到根结点和左右子树
  • Arrays.copyOfRange(T[] original, int from, int to) 方法
    复制指定的数组到一个新的数组。
  • 参数说明:
    其中T[] original是要复制的数组,from是复制开始位置的元素的序号(包括这个元素),to复制结束位置的序号(不包括这个元素)【使用时可能参数错误导致的异常】
public TreeNode reConstructBinaryTree(int [] pre,int [] vin) {
        if(pre.length==0)return null;
        TreeNode root = new TreeNode(pre[0]);
        int i = 0;
        while(vin[i]!=root.val){
            i++;
        }
        //递归传参排除根结点
        //用同样的找根结点的办法,递归处理root的左右子树
        root.left=reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1),
                                        Arrays.copyOfRange(vin,0,i));
        root.right=reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length),
                                         Arrays.copyOfRange(vin,i+1,vin.length));
        re
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务