题目:
给定一个二叉树,原地将它展开为一个单链表。
示例:
给定二叉树
将其展开为:
思路:
若根节点不为空:
- 找到根节点的左子树的最右节点,将根节点的右子树挂在该节点的右子树
- 根节点的右子树指向根节点的左子树,左子树置空
- 根节点移动到根节点的右节点
重复上述过程直到根节点为空。
示例:
……
非递归代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def flatten(self, root):
"""
:type root: TreeNode
:rtype: None Do not return anything, modify root in-place instead.
"""
res = TreeNode(0)
res = root
while res:
if res.left:
l = res.left
while l.right:
l = l.right
l.right = res.right
res.right = res.left
res.left = None
res = res.right
递归代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def flatten(self, root):
"""
:type root: TreeNode
:rtype: None Do not return anything, modify root in-place instead.
"""
if not root:
return
self.flatten(root.left)
self.flatten(root.right)
l = root.left
if l:
while l.right:
l = l.right
l.right = root.right
root.right = root.left
root.left = None