首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >球拍中的二叉树

球拍中的二叉树
EN

Stack Overflow用户
提问于 2014-11-18 14:41:37
回答 1查看 1.3K关注 0票数 0

嗨,问题是我想看看二叉树是否是N

我们称二叉树为二叉树,其中N是包含所有节点列表的数字数。例如,这是一个二叉树2:

'((1 2) ((7 10) ((2 4) null null)) ((6 8) ((10 13) null null) null))

这是一个二叉树1:

'(2- (7- (2 null null) (6 (5 null null) (11 null null))) (5 null (9 (4 null null) null)))

我有这样的代码:

代码语言:javascript
运行
复制
(define (abN? arbol N) (                        

cond

[(= (length  (list-ref list 0)) N) "Arbol Binario N" "No es un arbol binario N" ]

[(= (number? (car list)) N) "Arbol Binario 1" "No es un arbol binario 1" ]

) 
)

然后将其放在控制台中:

(abN? '((1 2) ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 2)

给我这个错误

代码语言:javascript
运行
复制
car: contract violation
expected: pair?
given: #<procedure:list>

我搞错什么了?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-18 14:51:10

您的代码中有几个错误,请尝试如下:

代码语言:javascript
运行
复制
(define (abN? arbol N) 
  (cond
    [(number? (car arbol))
     (if (= N 1)
         "Arbol Binario 1"
         "No es un arbol binario 1")]
    [(list? (car arbol))
     (if (= (length (car arbol)) N)
         "Arbol Binario N" 
         "No es un arbol binario N")]
    [else (error "Dato de entrada incorrecto")]))

解释:

  • 该参数名为arbol,但在您的代码中,您将它称为list (顺便说一下,它是一个内置函数)。这就是导致报告错误的原因
  • 没有必要使用list-ref访问列表的第一个元素,而是使用car
  • 您误解了cond表达式的工作方式。每个条件计算为后面表达式的最后一个值,如果您需要测试进一步的条件--您必须在其中使用一个if或另一个cond --您似乎认为每个条件都有一个隐式if-else条件,这是不正确的
  • 首先,必须验证列表中第一个元素的类型,否则可能会在数字上应用列表函数,这将导致错误。
  • 最后,如果你用英语发布代码的话,帮助你会更容易。我能理解西班牙语:P,但这里的大多数人都听不懂。

它对可能的投入起着预期的作用:

代码语言:javascript
运行
复制
(abN? '(1 ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 1)
=> "Arbol Binario 1"
(abN? '(1 ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 2)
=> "No es un arbol binario 1"
(abN? '((1 2) ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 2)
=> "Arbol Binario N"
(abN? '((1 2) ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 3)
=> "No es un arbol binario N"
(abN? '("bogus" ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 3)
=> Unknown input
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26996962

复制
相关文章

相似问题

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