递归构建左右子树。

重建二叉树

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

思路:先根据先序序列的第一个节点建立根节点,然后在中序节点找到这个节点,从而划分出根节点的左、右子树的中序序列。接下来再在先序序列中确定左右子树的先序序列,并由左子树的先序序列与中序序列继续递归建立左右子树。

/**
 * 前序遍历的第一个节点是根节点,在中序遍历中找到这个节点。
 * 中序遍历中这个节点左边的是左子树,右边是右子树。
 * 然后递归去构建左右子树。
 */
public class ReConstructBinaryTree {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        TreeNode root = construct(pre,in,0,pre.length-1,0,in.length-1);
        return  root;
    }

    private TreeNode construct(int[] pre, int[] in, int i, int j, int k, int h) {
        int m = k;
        TreeNode root = new TreeNode(pre[i]);
        while (pre[i] != in[m]) {
            m++;
        }
        if(m == k){
            // 没有左子树时,
            root.left = null;
        } else {
            root.left = construct(pre,in,i+1,i+m-k,k,m-1);
        }
        if(m == h) {
            root.right = null;

        } else {
            root.right = construct(pre,in,i+m-k+1,j,m+1,h);
        }
        return root;

    }
}
全部评论

相关推荐

看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗? 那对老老实实面试的人岂不是不公平....
重生之我要干前端:放宽心,作弊很明显的,面试官也不是傻子,而且这世上更多的肯定是依靠自己的知识的人,所以放宽心提升自己最重要
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
06-14 19:09
门头沟学院 Java
darius_:给制造业搞的,什么物料管理生产管理,设备管理点检,最最关键的就是一堆报表看板。个人觉得没啥技术含量都是些基本的crud,但是业务很繁琐那种
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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