【问题标题】:Binary tree to Binary Search Tree (BST)二叉树到二叉搜索树 (BST)
【发布时间】:2010-05-17 09:56:49
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

将无序二叉树转换为有序二叉搜索树很简单,但要快速完成有点困难。

这是一个满足您的标准的简单实现,我不会描述要采取的实际步骤,只描述整体算法。

  1. 从现有树中随机获取叶节点
  2. 从现有树中取消叶节点的链接
  3. 将节点设为新二叉搜索树的根
  4. 从现有树中获取另一个随机叶节点
  5. 从现有树中取消该节点的链接
  6. 找到合适的位置并将节点链接到新的二叉搜索树中
  7. 重复步骤 4-6,直到原始树为空

您应该只需要几个变量,例如要取消链接的叶节点的父节点(除非节点具有父链接)、新树的根节点和几个临时变量,所有这些都在您的O(1) 空间标准。

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

【讨论】:

    【解决方案2】:

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

    简单的 nlogn 解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 2019-04-09
      • 2023-03-08
      • 2013-01-08
      • 1970-01-01
      相关资源
      最近更新 更多