1

こんにちは、Racket をバイナリ ツリー構造に使用するのは初めてです。

次の構造を使用する

(define-struct human(age hight))

次のオブジェクト/変数/人間を作成しました

(define James(make-human 10 50))

二分木構造のノードがある場合

(define-struct node (left human right))

James がノード内にある場合、別のオブジェクトの高さ (Michael など) を James と比較するにはどうすればよいでしょうか。たとえば、次のようになります。

 (define (insert-human-into-tree human node)
  (cond
    [(empty? node)(make-node empty human empty)]
    [(<= human-hight( **node-human-hight**))

ノード内にある人間オブジェクトの高さフィールドにアクセスする方法を知る必要があります ( node-human-hight )。

4

2 に答える 2

3

構造体でアクセサ プロシージャを使用します。次に例を示します。

(define-struct human(age hight))
(define james (make-human 10 50))
(define-struct node (left human right))

(define anode (make-node null james null))
; access the human in the node, and then the height of that human
(human-hight (node-human anode))
=> 50

...そして、「hight」ではなく「height」と綴られています。したがって、質問に答えるために、比較は次のようになります。

(<= (human-hight (node-human node)) (human-hight human))
于 2013-05-14T20:29:28.580 に答える
1

実際insert-human-into-treeに新しいノードを挿入するには、比較を超えてもう少し必要になります。次のようになります(これは、主要な質問にも答えます):

(define (insert-human-into-tree human node)
  (if (empty? node)
      (make-node empty human empty)
      (let ((other (node-human node)))
        (cond ((< (human-height other) (human-height human))
               (insert-human-into-tree human (node-left node)))    ; go left
              ((> (human-height other) (human-height human))
               (insert-human-into-tree human (node-right node)))   ; go right
              (else ;; same height
                ...)))))

これで始められます。

于 2013-05-14T21:43:52.127 に答える