我是用的递归做的,难度不算很大,主要是要把递归函数的功能、流程设计好。
class Solution(object):
def flatten(self, root):
"""
:type root: TreeNode
:rtype: None Do not return anything, modify root in-place instead.
"""
def in_order(root): #把一棵树展开
if not root:
return None
right_node = root.right
left_node = in_order(root.left) #先把左子树展开
#摊开后根的左子树为空
root.left = None
#如果左子树非空,则让根的右子树为left_node,左子树的最右下的节点指向right_node。
if left_node:
root.right = left_node
while left_node.right:
left_node = left_node.right
left_node.right = right_node
#把右节点摊开
in_order(right_node)
return root
return in_order(root)