2013-05-14 105 views
1

您好我是Racket的新手,將它用於二叉樹結構。訪問節點內的變量字段

採用以下結構

(define-struct human(age hight)) 

我創建了以下對象/變量/人

(define James(make-human 10 50)) 

如果我有一個二進制樹結構中的節點

(define-struct node (left human right)) 

如何我可以比較一個不同的對象的高度(比如邁克爾)和詹姆斯,因爲詹姆斯在節點內,所以對於一個例子:

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

我需要知道如何訪問人類對象,這將是該節點(節點 - 人HIGHT)內所述的場HIGHT。

回答

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」。因此,要回答這個問題,比較是這樣的:

(<= (human-hight (node-human node)) (human-hight human)) 
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 
       ...))))) 

這會讓你開始。