LeetCode199二叉树的右视图

二叉树的右视图>>>
在这里插入图片描述

  • BFS:采用层序遍历,输出每层最后一个遍历的元素,即为右视图
  //层序遍历,每一层最右边的节点
    //层序遍历:返回树每层最右边的一个节点
    //时间复杂度:O(N)
    //空间复杂度:O(N)
    public List<Integer> rightSideView(TreeNode root) {

        List<Integer> rs = new ArrayList<>();
        if(root==null)return  rs;

        Queue<TreeNode> queue = new ArrayDeque<>();
        queue.add(root);

        while(!queue.isEmpty()){

            int size = queue.size();

            for(int i=0;i<size;i++){
                TreeNode temp = queue.poll();
                if(temp.left!=null){
                    queue.add(temp.left);
                }
                if(temp.right!=null){
                    queue.add(temp.right);
                }
                if(i==size-1){
                    rs.add(temp.val);
                }


            }

        }

        return rs;

    }
  • DFS:深度递归优先遍历,采取 根 右左的遍历顺序,如果发现当前list中没有加入值,则将当前遍历到的值加入到list中,否则说明已经加入了,跳过即可

  public List<Integer> rightSideView1(TreeNode root){
            List<Integer> rs = new ArrayList<>();
            if(root==null) return rs;
            dfs(root,rs,0);
            return rs;
    }

    //深度优先搜索
    //我们
    //先访问当前节点,再递归的访问右子树和左子树
    //如果当前节点所在深度还没有出现在res里
    //说明在该深度下当前节点是第一个被访问的节点,因此将当前节点加入res中

    /**
     *
     * @param root 当前遍历到的时
     * @param rs   保存的结果
     * @param depth 树的深度
     */
    public void dfs(TreeNode root,List<Integer> rs,int depth){

            if(root==null) return;

            if(rs.size()==depth){
                rs.add(root.val);
            }

            depth++;
            dfs(root.right,rs,depth);
            dfs(root.left,rs,depth);

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值