• leetcode刷题笔记 一百九十九题 二叉树的右视图


    leetcode刷题笔记 一百九十九题 二叉树的右视图

    源地址:199. 二叉树的右视图

    问题描述:

    给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

    示例:

    输入: [1,2,3,null,5,null,4]
    输出: [1, 3, 4]
    解释:

    1 <---
    /
    2 3 <---

    5 4 <---

    //基于DFS的递归方法 优先右侧
    /**
     * Definition for a binary tree node.
     * class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) {
     *   var value: Int = _value
     *   var left: TreeNode = _left
     *   var right: TreeNode = _right
     * }
     */
    //DFS 递归
    import scala.collection.mutable
    object Solution {
        def rightSideView(root: TreeNode): List[Int] = {
            val res = new mutable.ListBuffer[Int]()
            
            def dfs(root: TreeNode, depth: Int): Unit = {
                if (root == null) return
                if (depth == res.size) res.append(root.value)
                dfs(root.right, depth+1)
                dfs(root.left, depth+1)
            }
            
            dfs(root, 0)
            return res.toList
        }
    }
    
    //BFS 逐层遍历 取每层最后侧节点
    /**
     * Definition for a binary tree node.
     * class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) {
     *   var value: Int = _value
     *   var left: TreeNode = _left
     *   var right: TreeNode = _right
     * }
     */
    //BFS
    import scala.collection.mutable
    object Solution {
        def rightSideView(root: TreeNode): List[Int] = {
            val res = new mutable.ListBuffer[Int]()
            if (root == null) return res.toList
            
            val queue = new mutable.Queue[TreeNode]()
            queue.enqueue(root)
            while (queue.isEmpty == false){
                val size = queue.size
                for(i <- 0 to size-1){
                    val node = queue.dequeue
                    if (node.left != null) queue.enqueue(node.left)
                    if (node.right != null) queue.enqueue(node.right)
                    if (i == size-1) res.append(node.value)
                }
            }
            return res.toList
        }
    }
    
  • 相关阅读:
    第七周java学习总结
    第六周java学习总结
    20175206迭代与JDB测试
    第五周java学习总结
    实验一 Java开发环境的熟悉(Linux + Eclipse)
    第四周java学习总结
    第三周java学习总结
    es6零基础学习之项目目录创建(一)
    软键盘影响页面布局之定位
    当input的框全部不为空时,提交按钮变色
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13696116.html
Copyright © 2020-2023  润新知