C题:自定义TreeNode内部类,先造树再中序遍历返回结果

牛牛的字符反转

https://ac.nowcoder.com/acm/contest/6779/A

public class Main{
    ArrayList<Integer> mid_tree=new ArrayList<>();
    public int[] solve (int n, int[] pre, int[] suf) {
        TreeNode root= build_tree(pre,0,pre.length-1,suf,0,suf.length-1);
        dfs(root);
        return mid_tree.stream().mapToInt(Integer::valueOf).toArray();
    }
    public void dfs(TreeNode node){
        if(node==null) return;
        dfs(node.left);
        mid_tree.add(node.val);
        dfs(node.right);
    }
    private TreeNode build_tree(int[] pre, int left1,int right1,int[] suf,int left2,int right2){
        if(left1>right1||left2>right2) return null;
        TreeNode node=new TreeNode(pre[left1]);//pre[left1]一定等于suf[right2]
        if(left1+1>right1||right2-1<left2) return node;//没有左右子树了
        int left_end=right2-1;
        int right_start=left1+1;
        for(int i=right2-1;i>=left2;i--){//一定有左子树,先把左子树在suf的终点确定下来
            if(suf[i]==pre[left1+1]){
                left_end=i;//左子树在suf的终点
                break;
            }
        }
        if(left_end==right2-1){//只有左子树没有右子树,因为只有一个孩子时认为是左孩子
            node.left=build_tree(pre,left1+1,right1,suf,left2,left_end);
        }
        else{
            //左右子树都有,还得把右子树的界限确定下来
            for(int i=left1+1;i<=right1;i++){
                if(pre[i]==suf[right2-1]){
                right_start=i;//右子树在pre的起始位置
                }
            }
            node.left=build_tree(pre,left1+1,right_start-1,suf,left2,left_end);
            node.right=build_tree(pre,right_start,right1,suf,left_end+1,right2-1);
        }
        return node;
    }
    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }
}
全部评论

相关推荐

头像
昨天 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务