199. 二叉树的右视图¶
题目¶
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入:[1,2,3,null,5,null,4]
输出:[1,3,4]
示例 2:
输入:[1,null,3]
输出:[1,3]
复杂度¶
深度优先搜索 DFS
- 时间复杂度:\(O(n)\),其中 \(n\) 为二叉树的节点个数。
- 空间复杂度:\(O(n)\)。最坏情况下,二叉树退化成一条链,递归需要 \(O(n)\) 的栈空间。
题解¶
Go
func rightSideView(root *TreeNode) []int {
ans := []int{}
var dfs func(*TreeNode, int)
dfs = func(node *TreeNode, dep int) {
if node == nil {
return
}
if dep == len(ans) {
ans = append(ans, node.Val)
}
dfs(node.Right, dep+1)
dfs(node.Left, dep+1)
}
dfs(root, 0)
return ans
}
Python
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
ans = []
def dfs(node: Optional[TreeNode], depth: int) -> None:
if node is None: return
if depth == len(ans):
ans.append(node.val)
dfs(node.right, depth + 1)
dfs(node.left, depth + 1)
dfs(root, 0)
return ans