实际上我想知道的不是如何为BST实现有序遍历算法,而是仅使用BST的插入,删除和预先排序遍历算法来实现它。
您可以假设您获得了用于插入,删除和预订遍历的标准BST算法的实现。
答案 0 :(得分:0)
嗯......假设我们在根处有+,在左节点有1,在右节点有2。预订将为+ 1 2
,顺序为1 + 2
..不同之处在于第1和第2个已被交换,因此如果您有插入和删除,则可以递归地交换每个根节点值它的左节点值然后使用预先遍历遍历将返回的树将导致遍历遍历。
我不确定这是否可行,但我希望它有所帮助。
答案 1 :(得分:0)
我想我找到了解决方案。 :)
我们有预订遍历,插入和删除方法。
假设我们获得了BST。
我们所做的是,我们提供给定BST的预订遍历方法。因为预先遍序遍历总是首先转到父节点,所以我们删除并插入每个根(因为根是我们遇到的第一个父节点)递归,直到根的左子树为空。
现在你开始删除root,直到没有节点离开。将那些已删除的节点放在一个数组中或任何你想要的地方。您将获得已排序的节点集。 (即节点将按排序顺序删除。最小的第一个等等......)