求一个二叉树的右视图. 即从右方看到的元素从上到下的列表.
第一反应是层次遍历, 如果层次遍历的话, 空间复杂度应该是O(n),
第二反应是 如果求右视图相当于把树左右颠倒, 然后求左视图, 那么元素的出现顺序应当是前序遍历的顺序, 但是同一层的元素只取最左的一个.
那么右视图就是一个类似的右向前序遍历.
按照这样的想法写了一个递归的版本, 通过了..
非递归的版本只要记录层高即可.
class Solution:
def right_side_view(self, root: Optional[TreeNode], current_height, result):
if not root:
return
max_height = len(result)
current_height += 1
if current_height > max_height:
result.append(root.val)
self.right_side_view(root.right, current_height, result)
self.right_side_view(root.left, current_height, result)
return
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
result = []
self.right_side_view(root, 0, result)
return result