题解 | #输出二叉树的右视图#

输出二叉树的右视图

https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0

import java.util.*;


public class Solution {
   
    public int[] solve (int[] preOrder, int[] inOrder) {
        // write code here
        
        ArrayList<Integer> ret = new ArrayList<>();
        TreeNode root =build(preOrder,inOrder);
        TreeNode cur = root;
        //层序遍历。得到每一层最右边
        //队列进行先进先出
        Queue<TreeNode> q = new LinkedList<>();

       
        //先将根节点加入
        q.add(root);
        while(!q.isEmpty()){
            //记录当前队列大小,记录一层的节点数
            int n = q.size();
           //ArrayList<Integer> tmp = new ArrayList<>();
            for(int i=0;i<n;i++){
                TreeNode t = q.poll();
                //tmp.add(t.val);
                //为一层最后一个时
                if(i==n-1) ret.add(t.val);
                //同时将这一个节点的子节点加入队列
                //以下新增加的节点与n无关属于下一层
                if(t.left!=null){
                    q.add(t.left);
                }
                if(t.right!=null){
                    q.add(t.right);
                }
            }
        }
         int[] ret2 = new int[ret.size()];
         for(int i=0;i<ret.size();i++){
            ret2[i] = ret.get(i);
         }

        return ret2;
    }
    //建树
    private static TreeNode build(int[] preOrdder,int[] inOrder){
        int n =preOrdder.length;
        int m = inOrder.length;

        if(n==0||m==0) return null;

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

        //建树
        for(int i=0;i<inOrder.length;i++){
            if(preOrdder[0]==inOrder[i]){
                //找到根节点
                root.left = build(Arrays.copyOfRange(preOrdder,1,i+1),Arrays.copyOfRange(inOrder,0,i));
                root.right = build(Arrays.copyOfRange(preOrdder,i+1,preOrdder.length),Arrays.copyOfRange(inOrder,i+1,inOrder.length));
            }
        }
        return root;



        
    }
}

全部评论

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务