方法一:
class Solution:
def flatten(self, root: TreeNode) -> None:
if not root:
return
queue = []
def dfs(root):
if not root:
return
queue.append(root)
dfs(root.left)
dfs(root.right)
dfs(root)
head = queue.pop(0)
head.left = None
while queue:
tmp = queue.pop(0)
tmp.left = None
head.right = tmp
head = tmp
方法二:
class Solution:
def flatten(self, root: TreeNode) -> None:
if not root: return
stack = [root]
pre = TreeNode(-1)
while stack:
tmp = stack.pop()
pre.left, pre.right = None, tmp
if tmp.right:
stack.append(tmp.right)
if tmp.left:
stack.append(tmp.left)
pre = tmp
return pre
方法三:
class Solution:
def flatten(self, root: TreeNode) -> None:
self.pre = None
def dfs(root):
if not root:return None
dfs(root.right)
dfs(root.left)
root.left = None
root.right = self.pre
self.pre = root
dfs(root)
方法四:
class Solution:
def flatten(self, root: TreeNode) -> None:
def dfs(root):
if not root:return
dfs(root.left)
dfs(root.right)
if root.left:
pre = root.left
while pre.right:
pre = pre.right
pre.right = root.right
root.right = root.left
root.left = None
dfs(root)
本文详细解析了二叉树扁平化的四种不同实现方法,包括使用队列、栈、递归和Morris遍历的方式。每种方法都有其独特的优缺点,适合不同的场景需求。
491

被折叠的 条评论
为什么被折叠?



