📅  最后修改于: 2023-12-03 15:39:48.439000             🧑  作者: Mango
二叉树是一种常见的树形数据结构,有许多遍历方式,其中一种是后序遍历。后序遍历指的是先访问左子树,再访问右子树,最后访问根节点的遍历方式。按后序遍历的顺序展平二叉树指的是将一棵二叉树平展为一条链表,其遍历顺序为后序遍历的顺序。
例如,对于以下二叉树:
1
/ \
2 5
/ \ \
3 4 6
按照后序遍历的顺序展平后得到的链表为:3 -> 4 -> 2 -> 6 -> 5 -> 1
。
一个比较朴素的思路是,我们先使用递归的方式按照后序遍历的顺序遍历二叉树,将每个节点插入到一个单向链表的头部。具体过程如下:
代码实现如下:
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)
left = root.left
right = root.right
root.left = None
root.right = left
p = root
while p.right:
p = p.right
p.right = right