《计算机程序的构造与解释》(九)
来源:互联网 发布:知我者希 则我者贵 编辑:程序博客网 时间:2024/05/09 00:49
集合作为二叉树
二叉树的每个节点都由一个表来表示,这个表包含三个元素:本节点的元素、左子树和右子树。并且有三个选择函数:entry、left-branch、right-branch;一个构造函数make-tree。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define (entry tree) (car tree))(define (left-branch tree) (cadr tree))(define (right-branch tree) (caddr tree))(define (make-tree entry left right) (list entry left right))通过上面的四个过程,可以进一步定义二叉树操作如:判断某元素是否为树节点element-of-set?;添加元素adjoin-set。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define (element-of-set? x set) (cond ((null? set) false) ((= x (entry set)) true) ((< x (entry set)) (element-of-set? x (left-branch set))) ((> x (entry set)) (element-of-set? x (right-branch set)))));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define (adjoin-set x set) (cond ((null? set) (make-tree x '() '())) ((= x (entry set)) set) ((< x (entry set)) (make-tree (entry set) (adjoin-set x (left-branch set)) (right-branch set))) ((> x (entry set)) (make-tree (entry set) (left-branch set) (adjoin-set x (right-branch set))))))(adjoin-set 2 (adjoin-set 3 (adjoin-set 4 (adjoin-set 1 mTree))));;=>'(1 () (4 (3 (2 () ()) ()) ()))(element-of-set? 5 '(1 () (4 (3 (2 () ()) ()) ())));;=>#f(element-of-set? 4 '(1 () (4 (3 (2 () ()) ()) ())));;=>#t
将二叉树集合转换成表:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define (tree2list tree) (cond ((null? tree) null) (else (append (tree2list (left-branch tree)) (cons (entry tree) (tree2list (right-branch tree)))))))(define mTree (adjoin-set 5 (adjoin-set 6 (adjoin-set (adjoin-set 8 (adjoin-set 2 '()))))))mTree;;=>'(2 () (8 (3 () (6 (5 () ()) ())) ()))(tree2list mTree);;=>'(2 3 5 6 8)
0 0
- 《计算机程序的构造与解释》(九)
- 计算机程序的构造与解释(SICP)
- 计算机程序的解释与构造1
- 计算机程序的构造与解释
- 《计算机程序的构造与解释》(一)
- 《计算机程序的构造与解释》(二)
- 《计算机程序的构造与解释》(三)
- 《计算机程序的构造与解释》(四)
- 《计算机程序的构造与解释》(五)
- 《计算机程序的构造与解释》(六)
- 《计算机程序的构造与解释》(七)
- 《计算机程序的构造与解释》(八)
- 《计算机程序的构造与解释》(十)
- 《计算机程序的构造与解释》(十一)
- 《计算机程序的构造与解释》(十二)
- 《计算机程序的构造与解释》(十三)
- 《计算机程序的构造与解释》(十四)
- 《计算机程序的构造与解释》(十五)
- C++内存泄露检测方法
- HTML语言的应用,采用Dream Weaver软件快速的开发一个静态网页
- angularjs 教程4
- HashMap和Hashtable的区别
- angularjs 教程5
- 《计算机程序的构造与解释》(九)
- angularjs 教程6
- 黑马程序员Struts2使用JXL导入/导出数据
- Apache+PHP5+Mysql中收取Socket的POST数据问题
- 美国度假租赁管理创业公司TurnKey在种子轮融资中获得300万美元投资
- 论C/C++数据在内存中的二进制存放形式
- angularjs 教程7
- Search Insert Position
- 分享个各种源码在线查看的好网站