leetcode 199

求一个二叉树的右视图. 即从右方看到的元素从上到下的列表.

第一反应是层次遍历, 如果层次遍历的话, 空间复杂度应该是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
posted @ 2021-12-20 19:54  茫茫碧落  阅读(26)  评论(0编辑  收藏  举报