二叉树到二叉搜索树(BST)

时间:2010-05-17 09:56:49

标签: data-structures binary-tree big-o binary-search-tree

如何使用O(1)额外空间将二叉树转换为二叉搜索树?

2 个答案:

答案 0 :(得分:7)

将无序二叉树转换为有序二进制搜索树是微不足道的,但快速执行起来有点困难。

这是一个应该满足你的标准的天真实现,我不会描述实际采取的步骤,只是整体算法。

  1. 从现有树中获取随机叶节点
  2. 取消链接叶节点与现有树
  3. 使节点成为新二进制搜索树的根
  4. 从现有树中获取另一个随机叶节点
  5. 取消该节点与现有树的链接
  6. 找到正确的位置,并将节点链接到新的二进制搜索树
  7. 重复步骤4-6,直到原始树为空
  8. 您应该只需要几个变量,例如您要取消链接的叶节点的父节点(除非节点具有父链接),新树的根节点和一些临时变量,所有这些都在您的内部O(1)空间标准。

    这不会产生最佳的二叉搜索树。为此,您需要在添加节点之前对节点进行排序,并按正确顺序添加节点,或者使用平衡二叉搜索树,如红黑树或展开树。

答案 1 :(得分:-1)

将二进制树转换为双向链表 - 可以在O(n)中完成 然后使用merge sort,nlogn对其进行排序 将列表转换回树 - O(n)

简单的nlogn解决方案。