📅  最后修改于: 2023-12-03 15:09:33.144000             🧑  作者: Mango
在二叉搜索树(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节点的数量。