199. 二叉树的右视图

二叉树的右视图

题目描述:

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

示例 1:

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
示例 2:

输入: [1,null,3]
输出: [1,3]
示例 3:

输入: []
输出: []

提示:

二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100

思路:

时间复杂度:O(n),空间复杂度O(n)

用bfs来做,每一层取出最右边的那个节点的值。

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func rightSideView(root *TreeNode) []int {
    if root == nil{
        return []int{}
    }
    var res []int
    var queue,queue2 []*TreeNode
    queue = append(queue, root)
    var bfs func()
    bfs = func(){
        node := queue[0]
        queue = queue[1:]
        if node.Left != nil{
            queue2 = append(queue2, node.Left)
        } 
        if node.Right != nil{
            queue2 = append(queue2, node.Right)
        }
    }
    for len(queue)!=0 || len(queue2)!= 0{
        res = append(res, queue[len(queue)-1].Val)
        for len(queue) != 0{
            bfs()
        }
        queue = queue2
        queue2 = []*TreeNode{} 
    }
    
    
    return res
}

代码效率:

执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.1 MB, 在所有 Go 提交中击败了90.94%的用户