LeetCode 199. 二叉树的右视图

题目

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

例:
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

方法:递归

部分思路同 102. 二叉树的层序遍历。从右侧看到的节点值并不等于最右侧节点的值,因为可能存在从上到下最右侧的叶子节点的深度并不为二叉树的最大深度,所以可以通过使用之前层序遍历的方式将每层的节点值按照从右到左的顺序存入列表 record。因为列表 record 中每层节点分别存于不同的列表,即 record 中为列表的嵌套,根据之前的节点的遍历顺序,我们可以得知 record[i][0] 即为每层最靠右的节点值

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def rightSideView(self, root):
        record, result = [], []

        def DFS(node, depth):
            if not node:
                return None
            if len(record) == depth:
                record.append([]) 
            record[depth].append(node.val)
            if node.right:
                DFS(node.right, depth + 1)
            if node.left:
                DFS(node.left, depth + 1)

        DFS(root, 0)
        for i in range(len(record)):
            result.append(record[i][0])
        return result

你可能感兴趣的:(LeetCode 199. 二叉树的右视图)