Binary Tree Right Side View

题目描述

二叉树的右视图:

给定一颗二叉树,按照从顶部到底部的顺序,返回从右侧能看到的节点值。

解法

解法一:深度优先遍历

  • 时间复杂度:O(n)

  • 空间复杂度:O(n)

func rightSideView(root *TreeNode) []int {
    ans := []int{}
    layer := 1
    return dfs(root, layer, ans)
}

func dfs(root *TreeNode, layer int, res []int) []int {
    if root == nil {
        return res
    }

    if len(res) < layer {
        res = append(res, root.Val)
    }

    res = dfs(root.Right, layer+1, res)
    res = dfs(root.Left, layer+1, res)
    return res
}

解法二:广度遍历优先

  • 时间复杂度:O(n)

  • 空间复杂度:O(n)

func rightSideView(root *TreeNode) []int {
    ans := []int{}
    if root == nil {
        return ans
    }

    queue := []*TreeNode{root}
    for len(queue) > 0 {
        layerL := len(queue)
        for i := 0; i < layerL; i++ {
            node := queue[i]
            if node.Left != nil {
                queue = append(queue, node.Left)
            }
            if node.Right != nil {
                queue = append(queue, node.Right)
            }
        }
        if layerL >= 1 {
            ans = append(ans, queue[layerL-1].Val)
        }
        queue = queue[layerL:]
    }

    return ans
}

Last updated

Was this helpful?