【问题标题】:Inserting a new value in binary search tree在二叉搜索树中插入新值
【发布时间】:2010-03-02 23:16:11
【问题描述】:

使用算法 Tree-Insert(T, v) 将新值 v 插入二叉搜索树 T,以下算法通过将数组的给定部分中的每个值重复插入树中来生成二叉搜索树:

Tree-Grow(A, first, last, T)
1 for i ← first to last
2 do Tree-Insert(T, A[i])

  1. 如果树最初是空的,并且数组部分的长度(即last-first+1)为n,则上述算法的最佳情况和最坏情况的渐近运行时间是多少,分别?

  2. 当 n = 7 时,给出算法的最佳情况实例(作为包含数字 1 到 7 的数组,按特定顺序)和最坏情况实例(以相同的形式)。

  3. 如果数组已排序且所有值都不同,则想办法修改 Tree-Grow,使其始终构建最短的树。

  4. 修改后算法的最佳情况和最坏情况的渐近运行时间分别是多少?

【问题讨论】:

  • 到目前为止你得到了什么?
  • 这应该很容易通过快速浏览你的算法书来解释。如果它与我在大学时的相同,则有一整节包含上述数据。
  • @Russel:如果我不得不猜测的话,他到目前为止所做的是一个带回家的测试,并且今天已经有四个用户名。
  • 请停止标记此possible-homework,这不是标记的用途。请参阅:meta.stackexchange.com/questions/34503/…meta.stackexchange.com/questions/10811/…
  • 这是一个直截了当的家庭作业问题或考试问题。哇。 IMO 它应该被关闭。

标签: algorithm arrays data-structures binary-tree performance


【解决方案1】:

请使用homework 标记家庭作业问题。为了在期末考试中取得好成绩,我建议你实际学习这些东西,但我不是来评判你的。

1) 从第一个到最后一个迭代需要 O(n)。插入二叉树需要 O(lg n),因此您展示的算法在最佳情况下需要 O(n lg n)。

插入二叉树的最坏情况是树真的很长,但不是很浓密;类似于链表。在这种情况下,插入需要 O(n),因此在最坏的情况下需要 O(n^2)。

2) 最佳情况:[4, 2, 6, 1, 3, 5, 7],最坏情况:[1, 2, 3, 4, 5, 6, 7]

3) 使用 n/2 索引作为根,然后递归地对数组的左侧和右侧执行此操作。

4) O(n lg n) 在最好和最坏的情况下。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多