zoukankan      html  css  js  c++  java
  • 199. Binary Tree Right Side View

    一、题目

      1、审题

       

      2、分析

        一棵二叉树,从右边看他,看到的每一层的第一个元素存起来。

    二、解答

      1、思路:

        方法一、

        采用 Queue 进行层次遍历,且每次获取一层的最右边一个元素。

        public List<Integer> rightSideView(TreeNode root) {
            
            if(root == null)
                return null;
            List<Integer> result = new ArrayList<>();
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            queue.offer(root);
            while(!queue.isEmpty()) {
                
                int size = queue.size();
                for (int i = 0; i < size; i++) {
    
                    TreeNode node = queue.poll();
                    if(i == 0) {
                        result.add(node.val); 
                    }
                    if(node.right != null)
                        queue.add(node.right);
                    if(node.left != null)
                        queue.add(node.left);
                }
                
                    
            }
            return result;
        }

      方法二、

        采用递归获取每一层最右边元素;

        即修改后的前序遍历,遍历顺序为: 根 --> 右 --> 左 ;

        巧妙的将所遍历到的层次与 List 中元素的个数进行关联起来。

        public List<Integer> rightSideView2(TreeNode root) {
            
            List<Integer> result = new ArrayList<>();
            rightView(root, result, 0);
            return result;
        }
        
        private void rightView(TreeNode root, List<Integer> result, int curDepth) {
            
            if(root == null)
                return;
            
            if(curDepth == result.size())
                result.add(root.val);
            
            rightView(root.right, result, curDepth + 1);
            rightView(root.left, result, curDepth + 1);
        }
  • 相关阅读:
    申请加分项
    课程评价
    本周总结
    热词2
    热词1
    php大作业
    css网格布局
    php实验4
    本周总结
    css边框图像
  • 原文地址:https://www.cnblogs.com/skillking/p/9813028.html
Copyright © 2011-2022 走看看