给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
层序遍历:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
if not root:
return []
res, stack = [], [root]
while stack: # 层序遍历
len_stack = len(stack)
for i in range(len_stack):
node = stack.pop(0)
if i == len_stack-1:
res.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return res
递归:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
if not root:
return []
self.res = [root.val]
self.helper(root.right, 1) # 先右后左
self.helper(root.left, 1)
return self.res
def helper(self, node, height):
if not node:
return
if len(self.res)==height:
self.res.append(node.val)
self.helper(node.right, height+1)
self.helper(node.left, height+1)