📜  将BST展平到排序列表|递减顺序(1)

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

将BST展平到排序列表|递减顺序

在二叉搜索树(BST)中,左子树节点的值小于根节点的值,右子树节点的值大于根节点的值。因此,将BST展平到排序列表就是将BST节点按照从小到大的顺序排序,或者按照从大到小的顺序排序。在本文中,我们将重点介绍如何将BST展平到递减顺序的排序列表。

方法

展平BST可以使用中序遍历(inorder traversal)方法,由于中序遍历是左、根、右的顺序,我们可以先递归展平右子树,然后将根节点添加到结果列表中,最后递归展平左子树。

按照递减顺序展平BST,只需将上述顺序反转,即先递归展平左子树,然后将根节点添加到结果列表中,最后递归展平右子树。

以下是按照递减顺序展平BST的代码片段:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
      
class Solution:
    def flattenBST(self, root: TreeNode) -> List[int]:
        res = []
        self.helper(root, res)
        return res
    
    def helper(self, root: TreeNode, res: List[int]):
        if not root:
            return
        self.helper(root.left, res)
        res.append(root.val)
        self.helper(root.right, res)
示例

对于BST如下所示:

     4
    / \
   2   5
  / \   \
 1   3   6

按照递减顺序展平为排序列表的结果为:

[6, 5, 4, 3, 2, 1]
总结

展平BST到排序列表是一个常见的问题,我们可以使用中序遍历的方法进行解决。在按照递减顺序展平BST时,只需将中序遍历的顺序反转即可。该方法的时间复杂度为O(n),空间复杂度为O(n),其中n为BST节点的数量。