题解 | #重建二叉树#

重建二叉树

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

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
import java.util.Arrays;
public class Solution {
 public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
      if(pre.length==0 ||pre==null)    return null;

       int midIndex= findRootIndex(pre[0],in);

       TreeNode root =new TreeNode(pre[0]);

//        假设 下标    0  1  2  3     4 
//        前序为       1  2  4  5    3
//        中序为       4  5  2  1(m) 3
        //左子树的 Arrays.copyOfRange为左闭右开型  前序 [1,midindex+1) 和中序 [0,midindex) 
        root.left= reConstructBinaryTree(Arrays.copyOfRange(pre,1,midIndex+1),Arrays.copyOfRange(in,0,midIndex));
        //右子树   前序  [midIndex,pre.lenght)  [midIndex+1,in.lenght)
        root.right =reConstructBinaryTree(Arrays.copyOfRange(pre,midIndex+1,pre.length),Arrays.copyOfRange(in,midIndex+1,in.length));
        return root;
    }

    private int  findRootIndex(int pre, int[] in) {

           int index=0;
           while (pre!=in[index]){
               index++;
           }
           return index;
    }
}
全部评论

相关推荐

HOYI20190707232741:你好 我刚找到字节的暑期实习,可以提供一些建议 1. 生日等求职无关的消息可以去掉 2. 获奖等信息放在第一位,并且标注日期 3. 技术栈可以写,但是要加粗相关技术,不然一眼看过去抓不到重点 4. 最好不要写熟练(真的熟练当我没说),可以写熟悉、了解,不然很可能会被面试官追着问 5. 不了解或者没怎么用过的技术,不要写上去简历,也可能会被追着问 6. 字太多,看着有点紧凑,可以优化一下排版 7. 可以多做一个青训营项目或者比赛,丰富经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务