• 199_二叉树的右视图


    199_二叉树的右视图 

    package 二叉树.BT;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
    
    /**
     * https://leetcode-cn.com/problems/binary-tree-right-side-view/
     * @author Huangyujun
     *
     */
    public class _199_二叉树的右视图 {
        //方法一:广度优先遍历
        //明白了它要的时每层最后一个元素结点
        public List<Integer> rightSideView(TreeNode root) {
            List<Integer> res = new ArrayList<>();
            if (root == null) {
                   return res;
            }
            Queue<TreeNode> queue = new LinkedList<>();
            queue.offer(root);
            int levelSize = 1;
            while(!queue.isEmpty()) {
                TreeNode node = queue.poll();
                levelSize--;
                if(node.left != null) {
                    queue.offer(node.left);
                }
                if(node.right != null) {
                    queue.offer(node.right);
                }
                if(levelSize == 0) {
                    res.add(node.val);
                    levelSize = queue.size();
                }
            }
            return res;
        }
        //方法二:深度优先遍历 DFS [深度遍历,也是需要通过辅助变量深度变量,才知道到达下一层,然后前序变量【根 右  左】]
        /**
         * 我们按照 「根结点 -> 右子树 -> 左子树」 的顺序访问, 就可以保证每层都是最先访问最右边的节点的。
         * (与先序遍历 「根结点 -> 左子树 -> 右子树」 正好相反,先序遍历每层最先访问的是最左边的节点)
         */
    
        class Solution2 {
            List<Integer> res = new ArrayList<>();
    
            public List<Integer> rightSideView(TreeNode root) {
                dfs(root, 0); // 从根节点开始访问,根节点深度是0
                return res;
            }
    
            private void dfs(TreeNode root, int depth) {
                if (root == null) {
                    return;
                }
                // 先访问 当前节点,再递归地访问 右子树 和 左子树。
                if (depth == res.size()) {   // 如果当前节点所在深度还没有出现在res里,说明在该深度下当前节点是第一个被访问的节点,因此将当前节点加入res中。
                    res.add(root.val);
                }
                depth++;
                dfs(root.right, depth);
                dfs(root.left, depth);
            }
        }
    
    
    }

    本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/15709235.html

  • 相关阅读:
    2020 CCPC Wannafly Winter Camp Day2 E阔力梯的树(树上启发式合并)
    牛客练习赛73D 离别(线段树)
    从零开始部署图书管理系统
    linux下安装nginx(编译安装)及反向代理及负载均衡
    linux下MariaDB安装
    linux下virtualenvwrapper安装
    linux下安装虚拟环境
    linux下安装django2.2
    linux下安装nginx(yum源安装)
    linux系统优化命令--day03
  • 原文地址:https://www.cnblogs.com/shan333/p/15709235.html
Copyright © 2020-2023  润新知