leetcode-199-二叉树的右视图

题目描述:

第一次提交:BFS O(N) O(N)

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def rightSideView(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []
        stack = [root]
        res = []
        while stack:
            temp = []
            res.append(stack[0].val)
            for i in stack:
                if i.right:
                    temp.append(i.right)
                if i.left:
                    temp.append(i.left)
            stack = temp
        return res
            

方法二:DFS 递归实现: O(N) O(N)

class Solution(object):
    def rightSideView(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        d={} 
        def f(r,i): 
            if r: 
                d[i]=r.val 
                f(r.left,i+1) 
                f(r.right,i+1) 
        f(root,0) 
        return list(d.values())

 DFS 迭代实现:

class Solution:
    def rightSideView(self, root: TreeNode) -> List[int]:
        if not root:return []
        d = {}
        stack = [(root,0)]
        while stack:
            node,depth = stack.pop()
            d[depth] = node.val
            if node.right:
                stack.append((node.right,depth+1))
            if node.left:
                stack.append((node.left,depth+1))
        return list(d.values())

 

posted @ 2019-07-20 21:03  oldby  阅读(125)  评论(0编辑  收藏  举报