SICP 建立二叉查找(排序)树
2017-01-29 22:55
330 查看
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
在scheme和其他lisp家族语言中,二叉树常用list(列表)的嵌套来表示二叉树。
二叉树有三个节点,用scheme代码表示:
而建立二叉树的函数为:
那么添加构建排序二叉树的代码是:
在二叉查找树中查找元素x的代码:
建立第一张图所示的二叉树:结果是: (2 () ())
插入元素3建立第二张图所示的二叉树:结果是: (2 () (3 () ()))
插入元素1建立第三张图所示的二叉树:结果是: (2 (1 () ()) (3 () ()))
现在看来,lisp真是以解决问题为主要目的函数式编程语言,没有内存、指针这些底层因素的影响,大大简化了解决问题的繁琐程度。
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
在scheme和其他lisp家族语言中,二叉树常用list(列表)的嵌套来表示二叉树。
二叉树有三个节点,用scheme代码表示:
(define (entry tree) (car tree)) (define (left_branch tree) (cadr tree)) (define (right_branch tree) (caddr tree))
而建立二叉树的函数为:
(define (make_tree entry left_branch right_branch) (list entry left_branch right_branch))
那么添加构建排序二叉树的代码是:
(define (adjoin_set x set) ;;将x加入二叉树 (cond ((null? set) (make_tree x '() '())) ;;空树则建立一个以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))))))
在二叉查找树中查找元素x的代码:
(define (element_of_set? x set) (cond ((null? set) #f) ((= x (entry set)) #t) ((< x (entry set)) (element_of_set? x (left_branch set))) ((> x (entry set)) (element_of_set? x (right_branch set)))))
建立第一张图所示的二叉树:结果是: (2 () ())
插入元素3建立第二张图所示的二叉树:结果是: (2 () (3 () ()))
插入元素1建立第三张图所示的二叉树:结果是: (2 (1 () ()) (3 () ()))
现在看来,lisp真是以解决问题为主要目的函数式编程语言,没有内存、指针这些底层因素的影响,大大简化了解决问题的繁琐程度。
相关文章推荐
- Java 二叉查找(排序)树 创建 以及中序和层序遍历
- 十一、二叉查找(排序)树(符号表的实现)
- 二叉查找(排序)树
- 线性表的操作(完成表的建立,插入,删除,排序,销毁,查找 )
- 二叉查找数转成排序的双链表
- 二叉 查找树 排序树 搜索树
- 二叉排序查找树
- 05_ 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历
- Java数据结构----树--二叉查找(搜索或排序)树BST
- 二叉查找树的建立,遍历,查找
- Java 二叉查找(排序)树 创建 以及中序和层序遍历
- 用二叉查找数排序
- 二叉排序的创建,删除,遍历,查找
- 平衡二叉树、完全二叉树、满二叉树、二叉搜索(查找 / 排序)树、平衡二叉搜索树、二叉堆
- Pku acm 2371 Questions and answers 排序算法解题报告(三)----二叉查找数(BST)排序
- 二叉查找(排序)树的分析与实现
- 在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点
- 第十四周 项目2-二叉树排序树中查找的路径
- 数据结构——二叉查找(排序)树
- 数组排序和查找