Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
For example:
Given the following binary tree,
1 <--- / \ 2 3 <--- \ \ 5 4 <---
You should return [1, 3, 4]
.
思路:
BFS记录节点和节点所在的高度,保存每层高度里面最后一个节点的值。
from collections import deque
# Definition for a binary tree node.
class TreeNode:
"""
treeNode struct
"""
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class RecodeItem:
"""
BFS record
"""
def __init__(self, treeNode, nLevel):
self.treeNode = treeNode
self.nLevel = nLevel
class Solution:
def rightSideView(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
retVec = []
if root == None:
return retVec
preItem = None
currentLevel = 0
recodeItem = RecodeItem(root, currentLevel)
que = deque()
que.append(recodeItem)
while len(que) > 0:
item = que.popleft()
if item.nLevel != currentLevel:
currentLevel = item.nLevel
retVec.append(preItem.treeNode.val)
preItem = item
if item.treeNode.left != None:
tempItem = RecodeItem(item.treeNode.left, currentLevel + 1)
que.append(tempItem)
if item.treeNode.right != None:
tempItem = RecodeItem(item.treeNode.right, currentLevel + 1)
que.append(tempItem)
if preItem != None:
retVec.append(preItem.treeNode.val)
return retVec
def main():
root =TreeNode(1)
"""
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(5)
root.right.right = TreeNode(4)
"""
suo = Solution()
ret = suo.rightSideView(root)
print(ret)
if __name__ == '__main__':
main()