114. 二叉树展开为链表

给定一个二叉树,原地将它展开为一个单链表。

例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6

代码

  1. # Definition for a binary tree node.
  2. # class TreeNode:
  3. # def __init__(self, val=0, left=None, right=None):
  4. # self.val = val
  5. # self.left = left
  6. # self.right = right
  7. class Solution:
  8. def flatten(self, root: TreeNode) -> None:
  9. """
  10. Do not return anything, modify root in-place instead.
  11. """
  12. if not root or (not root.left and not root.right):
  13. return root
  14. #先把左右子树捋直
  15. self.flatten(root.left)
  16. self.flatten(root.right)
  17. tmp = root.right #把捋直的右子树备份一下
  18. root.right = root.left #把捋直的左子树放到右边
  19. root.left = None #记得把左子树置空
  20. while(root.right): #找到现在右子树的最后一个node
  21. root = root.right
  22. root.right = tmp #把捋直的原来的右子树接上去