📌  相关文章
📜  按后序遍历的顺序展平二叉树(1)

📅  最后修改于: 2023-12-03 15:39:48.439000             🧑  作者: Mango

按后序遍历的顺序展平二叉树

介绍

二叉树是一种常见的树形数据结构,有许多遍历方式,其中一种是后序遍历。后序遍历指的是先访问左子树,再访问右子树,最后访问根节点的遍历方式。按后序遍历的顺序展平二叉树指的是将一棵二叉树平展为一条链表,其遍历顺序为后序遍历的顺序。

例如,对于以下二叉树:

     1
    / \
   2   5
  / \   \
 3   4   6

按照后序遍历的顺序展平后得到的链表为:3 -> 4 -> 2 -> 6 -> 5 -> 1

实现

一个比较朴素的思路是,我们先使用递归的方式按照后序遍历的顺序遍历二叉树,将每个节点插入到一个单向链表的头部。具体过程如下:

  1. 遍历左子树,并将左子树按照后序遍历的顺序插入到链表的头部。
  2. 遍历右子树,并将右子树按照后序遍历的顺序插入到链表的头部。
  3. 将当前节点插入到链表的头部。

代码实现如下:

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
参考