Binary Tree Right Side View

思考:只需要知道每一行的最后一个节点值即可。

方法

  • 1、考虑使用两个队列进行BFS,A队列存放当前行的节点,B队列存放当前节点的子节点,即当A队列空时,最后一个访问的节点即位当前行的最后一个节点。
  • 2、递归遍历。每一层都会有一个值加入列表,即可以利用DFS来遍历,并传入当前深度level(root为1),如果当前深度等于re(结果列表)的长度,即将re的第level个值更新为当前节点的值(每一行的最后一个节点会覆盖其之前的所有节点,这样re中存的就是最右边的值)。如果level大于re的长度,则添加当前节点值为re的第level个值(level只会比re长度大一,所以直接add就可以)。

代码块

利用双队列

    public class Solution {
        public List<Integer> rightSideView(TreeNode root) {
            Queue<TreeNode> q1 = new LinkedList<TreeNode>();
            List<Integer> re = new LinkedList<Integer>();
            if(root == null)
                return re; 
            q1.add(root);
            while(!q1.isEmpty()){
                Queue<TreeNode> q2 = new LinkedList<TreeNode>();
                TreeNode temp = null;
                while(!q1.isEmpty()){
                    temp = q1.poll();
                    if(temp.left != null)
                        q2.add(temp.left);
                    if(temp.right != null)
                        q2.add(temp.right);
                }
                re.add(temp.val);
                q1.addAll(q2);
            }
            return re;
        }
    }

利用递归

    public class Solution {
        public List<Integer> rightSideView(TreeNode root) {

            List<Integer> re = new LinkedList<Integer>();
            DFSRightView(root, 1, re);
            return re;
        }

        void DFSRightView(TreeNode node, int level, List<Integer>re){
            if(node == null)
                return;
            if(level > re.size())   re.add(node.val);
            else    re.set(level - 1, node.val);

            DFSRightView(node.left, level + 1, re);
            DFSRightView(node.right, level + 1, re);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值