将节点插入树中 - Racket
Insert Node into a Tree - Racket
我正在尝试向树中添加一个新节点。以下是我的定义和函数类型:
(define-struct (Some T)
([value : T]))
(define-type (Option T)
(U 'None (Some T)))
(define-type BST (U 'E Nd))
(define-struct Nd
([root : Integer]
[lsub : BST]
[rsub : BST]))
(: insert : Integer BST -> BST)
;; insert an item into a tree
;; note: do not insert duplicate items
(define (insert n x)
(match x
('E 'E)
((Nd ro ls rs)
(cond
((= (size x) 1) (Nd ro (Nd n 'E 'E) 'E))
(else
(Nd ro ls rs))))))
Insert 是将节点插入到树中的插入。
以下是我要给出的命令:
(insert 10 (Nd 1 (Nd 2 (Nd 4 'E 'E) (Nd 5 'E 'E)) (Nd 3 (Nd 6 'E 'E) (Nd 7 'E 'E))))
它应该将 10 插入到树中。然而,我在家自学,我不知道该做什么。请帮忙。非常感谢!
你错过了递归,你的基本情况是错误的。
插入空树会创建一个只有一个节点的树。
在非空BST中插入三种情况:
- 如果项目与该节点中的项目相同,return树不变
- 如果item小于该节点,则插入左子树
- 否则,插入右子树
类似
(define (insert n x)
(match x
('E (Nd n 'E 'E))
((Nd ro ls rs)
(cond
((= n ro) x)
((< n ro) (Nd ro (insert n ls) rs))
(else (Nd ro ls (insert n rs)))))))
你要插入的树不是 BST,所以这行不通。
您的树具有以下结构:
1
/\
2 3
/\ /\
4 5 6 7
包含这些元素的搜索树如下所示:
4
/\
2 6
/\ /\
1 3 5 7
也就是
(Nd 4 (Nd 2 (Nd 1 'E 'E) (Nd 3 'E 'E)) (Nd 6 (Nd 5 'E 'E) (Nd 7 'E 'E)))
我正在尝试向树中添加一个新节点。以下是我的定义和函数类型:
(define-struct (Some T)
([value : T]))
(define-type (Option T)
(U 'None (Some T)))
(define-type BST (U 'E Nd))
(define-struct Nd
([root : Integer]
[lsub : BST]
[rsub : BST]))
(: insert : Integer BST -> BST)
;; insert an item into a tree
;; note: do not insert duplicate items
(define (insert n x)
(match x
('E 'E)
((Nd ro ls rs)
(cond
((= (size x) 1) (Nd ro (Nd n 'E 'E) 'E))
(else
(Nd ro ls rs))))))
Insert 是将节点插入到树中的插入。
以下是我要给出的命令:
(insert 10 (Nd 1 (Nd 2 (Nd 4 'E 'E) (Nd 5 'E 'E)) (Nd 3 (Nd 6 'E 'E) (Nd 7 'E 'E))))
它应该将 10 插入到树中。然而,我在家自学,我不知道该做什么。请帮忙。非常感谢!
你错过了递归,你的基本情况是错误的。
插入空树会创建一个只有一个节点的树。
在非空BST中插入三种情况:
- 如果项目与该节点中的项目相同,return树不变
- 如果item小于该节点,则插入左子树
- 否则,插入右子树
类似
(define (insert n x)
(match x
('E (Nd n 'E 'E))
((Nd ro ls rs)
(cond
((= n ro) x)
((< n ro) (Nd ro (insert n ls) rs))
(else (Nd ro ls (insert n rs)))))))
你要插入的树不是 BST,所以这行不通。
您的树具有以下结构:
1
/\
2 3
/\ /\
4 5 6 7
包含这些元素的搜索树如下所示:
4
/\
2 6
/\ /\
1 3 5 7
也就是
(Nd 4 (Nd 2 (Nd 1 'E 'E) (Nd 3 'E 'E)) (Nd 6 (Nd 5 'E 'E) (Nd 7 'E 'E)))