Lisp实现二叉搜索树
使用sbcl实现二叉搜索树相关操作1. 定义节点(defstruct node value left right)2. 定义二叉树基础操作函数(defun bst-copy (root) (if (null root) nil (let ((value (node-value root)) (left (node-left root)) (right (node-right root))) (make-node :value value :left (bst-copy left) :right (bst-copy right)) ) ) ) (defun bst-min (root) (if (null root) nil (let ((left (node-left root))) (if (not (null left)) (bst-min left) root ) ) ) ) (defun bst-merge (root) (if (null root) nil (let ((value (node-value root)) (left (node-left root)) (right (node-right root))) (cond ((null left) (bst-copy right)) ((null right) (bst-copy left)) (t (let ((r (bst-copy right))) (let ((min (bst-min r))) (setf (node-left r) (bst-copy left)) r ) )) ) ) ) ) (defun bst-insert (obj optional root) (if (null root) (make-node :value obj) (let ((value (node-value root))) (cond (( value obj) (make-node :value value :left (node-left root) :right (node-right root))) (( value obj) (make-node :value value :left (node-left root) :right (bst-insert obj (node-right root)))) (t (make-node :value value :left (bst-insert obj (node-left root)) :right (node-right root))) ) ) ) ) (defun bst-remove (obj root) (if (null root) nil (let ((value (node-value root)) (left (node-left root)) (right (node-right root))) (cond (( value obj) (bst-merge root)) (( value obj) (make-node :value value :left left :right (bst-remove obj right))) (t (make-node :value value :left (bst-remove obj left) :right right)) ) ) ) ) (defun order (tree) (when tree (append (order (node-left tree)) (list (node-value tree)) (order (node-right tree)))))其中bst-copy用于复制二叉树bst-merge用于合并子树order用于中序遍历节点bst-insert用于构造二叉树bst-remove用于删除节点3.测试(defparameter bst nil) (setf bst (bst-insert 2 bst)) (setf bst (bst-insert 1 bst)) (setf bst (bst-insert 3 bst)) (setf bst (bst-insert 4 bst)) (setf bst (bst-insert 5 bst)) (defparameter bst1 (bst-insert 3 bst)) (format t bst: ~a ~%~% (order bst)) (format t bst1: ~a ~% bst1) (defparameter x (bst-copy bst)) (format t ~a ~%~% (order x)) ;(trace bst-min) (format t min: ~a ~% (bst-min bst1)) (format t merge: ~a ~% (bst-merge bst1)) (setf bst (bst-remove 1 bst)) (format t remove: ~a ~% (order bst)) (setf bst (bst-remove 4 bst)) (format t remove: ~a ~% (order bst))

相关新闻

Sketch MeaXure终极实战指南:告别设计标注的“翻译“难题 [特殊字符]

Sketch MeaXure终极实战指南:告别设计标注的“翻译“难题 [特殊字符]

Sketch MeaXure终极实战指南:告别设计标注的"翻译"难题 🚀 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 你是否经历过这样的场景?设计师精心完成UI设计后,开发…

2026/6/26 20:18:19阅读更多 →
终极Sketch设计标注指南:5分钟掌握MeaXure高效协作技巧

终极Sketch设计标注指南:5分钟掌握MeaXure高效协作技巧

终极Sketch设计标注指南:5分钟掌握MeaXure高效协作技巧 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 你是否曾经在设计交付时,为了标注一个简单的间距而花费半小时?或者因为开发同事…

2026/6/26 20:18:19阅读更多 →
三轴陀螺仪在物联网中的低成本姿态监测方案

三轴陀螺仪在物联网中的低成本姿态监测方案

1. 项目背景与核心需求 去年在开发一个工业设备状态监测系统时,遇到一个棘手问题:如何低成本实现设备倾斜角度的实时监测。传统方案要么精度不足,要么成本高昂。经过多次测试,最终采用三轴陀螺仪加速度计的方案,在保证…

2026/6/26 20:18:19阅读更多 →
微信小程序逆向工程终极指南:5步快速掌握wxapkg文件完整解包技术

微信小程序逆向工程终极指南:5步快速掌握wxapkg文件完整解包技术

微信小程序逆向工程终极指南:5步快速掌握wxapkg文件完整解包技术 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 微信小程序的.wxapkg文件总是…

2026/6/26 21:33:34阅读更多 →
UvSquares:Blender UV编辑的终极网格重塑插件指南

UvSquares:Blender UV编辑的终极网格重塑插件指南

UvSquares:Blender UV编辑的终极网格重塑插件指南 【免费下载链接】UvSquares Blender addon for reshaping UV quad selection into a grid. 项目地址: https://gitcode.com/gh_mirrors/uv/UvSquares UvSquares是Blender用户的必备UV编辑插件,专…

2026/6/26 21:33:34阅读更多 →
3分钟解放你的QQ音乐:macOS专属格式转换全攻略

3分钟解放你的QQ音乐:macOS专属格式转换全攻略

3分钟解放你的QQ音乐:macOS专属格式转换全攻略 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结果…

2026/6/26 21:33:34阅读更多 →
刘二大人pytorch教程课后作业(03—2)——随机梯度下降

刘二大人pytorch教程课后作业(03—2)——随机梯度下降

import matplotlib.pyplot as plt #############################################################随机梯度下降算法x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0]w 1.0def forward(x):return x * w# calculate loss function def loss(x, y):y_pred forward(x)return (…

2026/6/26 21:33:34阅读更多 →
STM32 SPI多设备片选解决方案与优化实践

STM32 SPI多设备片选解决方案与优化实践

1. 问题背景与核心痛点在嵌入式开发中,SPI(Serial Peripheral Interface)总线因其简单高效的特性,成为连接各类传感器、存储芯片和显示模块的首选方案。STM32系列MCU内置的硬件SPI外设性能优异,但许多开发者第一次使用…

2026/6/26 21:33:34阅读更多 →
Tomcat管理后台弱口令漏洞实战:从环境搭建到RCE利用与防御

Tomcat管理后台弱口令漏洞实战:从环境搭建到RCE利用与防御

1. 项目概述与核心目标最近在整理一些安全测试的实战笔记,翻到了之前在360众测靶场里做的一道关于Tomcat远程代码执行(RCE)的题目。这道题非常经典,它模拟了一个因配置不当而导致的Tomcat管理后台弱口令漏洞,并最终通过…

2026/6/26 21:28:33阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

一、前言:企业运维痛点与资源价值自博通收购 VMware 之后,原 VMware 公开免费下载渠道全面关闭,企业运维人员想要获取适配 HPE 慧与服务器的 ESXi 9 原厂镜像,必须注册博通账号、绑定有效授权才能下载,无授权账号无法获…

2026/6/26 0:02:15阅读更多 →
Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin作为一门现代编程语言,与Java的互操作性一直是其核心优势之一。为了让Kotlin代码能够无缝对接Java,Kotlin提供了多种注解来优化互操作体验,其中JvmStatic和JvmField是两个关键注解。它们分别用于解决静态成员和字段在Java中的访问问题&…

2026/6/26 0:02:15阅读更多 →
深入解析musl libc中的mmap实现源码

深入解析musl libc中的mmap实现源码

最近在阅读musl libc源码时,发现其mmap的实现非常精妙,特分享给大家。 一、代码整体结构 这段代码实现了__mmap函数,并通过weak_alias导出为mmap。这是典型的musl libc风格——提供弱符号以便用户可以重写。 weak_alias(__mmap, mmap); 二…

2026/6/26 0:02:15阅读更多 →