Leetcode 114.二叉树展开为链表
1 题目描述(Leetcode题目链接)
给定一个二叉树,原地将它展开为链表。例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
2 题解
递归,将左边插到右边。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def flatten(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
if not root:
return
self.flatten(root.left)
self.flatten(root.right)
if not root.left:
return
node = root.left
while node.right:
node = node.right
node.right = root.right
root.right = root.left
root.left = None
利用二叉树的前序遍历,通过栈迭代实现,但是应该不算原地了。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def flatten(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
if not root:
return
retv = TreeNode(0)
temp = retv
stack = [root]
while stack:
curr = stack.pop()
temp.right = curr
temp.left = None
temp = temp.right
if curr.right:
stack.append(curr.right)
if curr.left:
stack.append(curr.left)
root = retv.right