C ++如何在不使用额外空间的情况下将二叉树转换为二叉树搜索树

时间:2015-12-10 06:55:45

标签: c++ data-structures binary-search-tree

此C ++分配要求我们创建二叉树并检查它是否是二叉搜索树。如果不是,那么我们需要一个算法来修复它而不使用额外的空间或其他数据结构。我和我的朋友都在坚持找出一个合适的算法,因为大量的在线搜索几乎没有。我们并不关心运行时,我们主要关注如何根据给定的要求修复BT。

链接列表用于创建树,但我们很难理解如何实现某种算法将其转换为BST。

任何提示都将不胜感激!

2 个答案:

答案 0 :(得分:1)

按照以下步骤操作:

  1. 检查二叉树T1是否为二进制搜索树。如果是,则无需担心,否则转到步骤2
  2. 执行给定二进制树的后序遍历并创建另一个树T2 (将其视为二进制搜索树,最初指向NULL,最初表示为空)< / em>的
  3. 在进行二叉树的后序遍历时,继续逐个删除节点并创建每个节点的副本,并将该节点逐个插入BST T2。 (注意:插入应以BST方式完成)
  4. <强>复杂度:
    最糟糕的复杂性: O(n 2 )。
    空间复杂度: O(1)。 常量

答案 1 :(得分:0)

您可以按照以下步骤将二叉树转换为二进制搜索树:

  1. 首先,我们将二叉树转换为双向链表。做一个inorder遍历并更改左右指针(左边可以用作前一个和右边的指针),相应地形成一个链接列表。

  2. 然后对链接列表进行排序(在此处使用合并排序,因为它会对链接列表进行排序)。

  3. 然后,您可以将此链接列表转换回树。以root作为链表的中间元素开始,并使用递归函数相应地向左和向右移动。

  4. 这将创建一个平衡的树。