【问题标题】:Binary Search Tree Algorithm二叉搜索树算法
【发布时间】:2012-11-01 11:48:07
【问题描述】:
Search(T,k)
x<- root[T]
while x != NULL and k != key[x] 
do 
  if k<key[x]
    then x <- left[x]
  else x <- right[x]
    return x

我刚从算法开始,我经常看到“

【问题讨论】:

  • 这里的符号有点不同。 x 中的 key[x] 不是索引。它实际上意味着“节点x处的键值”。与left[x] 类似,right[x], they mean "the left and right nodes of x.
  • 如果你更熟悉面向对象的表示法,你可以把key[x]读成x.keyleft[x]读成x.left等等。
  • @hammar,你不是说面向对象表示法下的 C 风格表示法吗?

标签: algorithm binary-tree binary-search-tree


【解决方案1】:

这是伪代码(不是真正的语言)。

在这种情况下,&lt;- 表示“已分配”,可以被认为是在做 = 在现代语言中所做的事情。 key[x] 是结构/对象xkey 属性的简写(这并不意味着它一定是x 类的成员,它可以从诸如地图之类的数据结构中检索。实际实现留给算法实现者。

所以上面的算法可以用 C 写成:

Node* Search(Tree* T, Key k)
{
    Node* x = T->Root();
    while ((x != NULL) && (k != x->Key())
    {
        if (k < x->Key())
            x = x->Left();
        else
            x = x->Right();
    }

    return x;
}

【讨论】:

    【解决方案2】:

    这看起来像伪代码。将&lt;- 视为Java 中的赋值运算符=。您有时还会在其他伪代码变体中看到 :=

    x 用作指向树中节点的指针。 key 是绘制树时通常在圆圈中找到的值,leftright 是节点的两个子节点。

    编辑:那个伪代码也有点不对劲。詹姆斯的例子很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-05
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2020-09-03
      • 1970-01-01
      相关资源
      最近更新 更多