给定一个二叉树,原地将它展开为链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
思路
先将root.left为根节点的子树展开,记录展开后的最后一个节点,将root.right连接到该节点右侧,再将root.right为根节点的子树展开
建立函数help,将树展开并返回最后一个节点
代码
def flatten(self, root):
if(root==None):return
self.L(root)
def help(self,root):
if root==None:return None
if(root.left==None and root.right==None):return root
left_last=root#记录展开后的最后一个节点
if(root.left!=None):
left_last=self.help(root.left)
left_last.right=root.right
root.right=root.left
root.left=None
if left_last.right==None:return left_last#右子树为None时,left_last即为最后一个节点
return self.help(left_last.right)#否则递归的寻找最后一个节点