首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二叉树搜索的迭代版本

二叉树搜索的迭代版本
EN

Stack Overflow用户
提问于 2009-10-01 06:51:14
回答 1查看 4K关注 0票数 3

基本树-在二叉搜索树中搜索节点(值为k)的搜索算法。'x‘表示二进制搜索树的节点。

代码语言:javascript
复制
TREE-SEARCH (x, k)
 if x= NIL or k = key[x]
    then return x
 if k < key[x]
    then return TREE-SEARCH(left[x], k)
    else return TREE-SEARCH(right[x], k)

迭代版本:

代码语言:javascript
复制
ITERATIVE-TREE-SEARCH(x, k)
 while x ≠ NIL and k ≠ key[x]
     do if k < key[x]
           then x ← left[x]
           else x ← right[x]
 return x

迭代算法的第一行实际上不应该是while (x≠NIL OR k≠keyx)而不是(while x≠NIL and k≠keyx)吗?

顺便说一句,如果你想知道,这是一本著名的算法分析书。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-01 06:55:24

不,它需要为and,否则如果找不到k,您将取消引用NIL。请记住,只要表达式的计算结果为真,while就会执行。

代码语言:javascript
复制
while x ≠ NIL and k ≠ key[x]

如果x为NIL,则表达式x ≠ NIL and k ≠ key[x]为false,因为x ≠ NIL为false。and的任何一端为false都会导致整个表达式为false。

如果使用orx ≠ NIL仍然是false,但您需要评估另一边- or的两端都必须为false,才能使or为false。不幸的是,评估另一端时会取消引用NIL。哦哦。即使不是因为这个问题,k ≠ key[x]也是真的(因为我们考虑的情况是找不到k,因此树x中的任何key都不能为k)。由于or的一个(或多个)侧为true,因此or的计算结果为true,循环将永远继续。

在英语中,while可以理解为: while tree (x ≠ NIL) 我们还没有找到我们正在寻找(k ≠ key[x])。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1502291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档