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
上一篇:opencv第4讲--遍历图像中的每一个像素


下一篇:13_JavaScript数据结构与算法(十三)二叉搜索树