簡體   English   中英

球拍中的二叉樹

[英]Binary trees in racket

嗨,問題是我想看看二叉樹是否為N

我們稱二叉樹,其中N是將包含所有節點列表的數字數。 例如,這是一個二叉樹2:

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

這是一個二叉樹:

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

我誤會了什么?

謝謝。

您的代碼中有幾個錯誤,請嘗試以下操作:

(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來訪問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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM