【问题标题】:Binary trees in racket球拍中的二叉树
【发布时间】:2014-11-18 23:07:24
【问题描述】:

你好问题是我想看看二叉树是不是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)))

我有这个代码:

(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)

然后给我这个错误

car: contract violation
expected: pair?
given: #<procedure:list>

我搞错了什么?

谢谢。

【问题讨论】:

    标签: functional-programming scheme racket


    【解决方案1】:

    你的代码有几个错误,试试这个:

    (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 ,但这里的大多数人不会。

    对于可能的输入,它按预期工作:

    (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
    

    【讨论】:

    • 感谢您的帮助,现在我可以很好地理解它了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多