当前位置: 首页 > news >正文

跟我一起学“仓颉”算法-二叉查找树练习题

目录

一、练习题

二、小结


一、练习题

1. 给定一个字母二叉树的树叶删除序列,输出树的先序遍历。

package Algorithm.bst import std.collection.* public class Node { public var val: String public var left: Option<Node> public var right: Option<Node> public init(val: String) { this.val = val this.left = Option<Node>.None this.right = Option<Node>.None } } public class LeafDeletionSequenceToPreorder { // 根据树叶删除序列构建二叉树 public static func buildTreeFromLeafDeletion(deletionSequence: Array<String>): Node { // 反转删除序列,得到类似后序遍历的顺序 let reversed = Array<String>(deletionSequence.size, repeat: '') for (i in 0..deletionSequence.size) { reversed[i] = deletionSequence[deletionSequence.size - 1 - i] } // 使用哈希表记录每个节点的父节点关系 let nodeMap = HashMap<String, Node>() var root = Option<Node>.None // 处理反转后的序列 for (i in 0..reversed.size) { let current = reversed[i] let currentNode = Node(current) nodeMap.add(current, currentNode) if (i > 0) { let parentChar = reversed[i - 1] var parentNode = nodeMap[parentChar] if (parentNode.left.isNone()) { parentNode.left = currentNode } else { parentNode.right = currentNode } } else { root = currentNode } } return root.getOrThrow() } // 先序遍历二叉树 public static func preorderTraversal(root: Option<Node>): String { let sb = StringBuilder() preorderHelper(root, sb) return sb.toString() } private static func preorderHelper(node: Option<Node>, sb: StringBuilder): Unit { if (node.isNone()) { return } sb.append(node.getOrThrow().val) preorderHelper(node.getOrThrow().left, sb) preorderHelper(node.getOrThrow().right, sb) } }

测试代码

package Algorithm import Algorithm.bst.* main(): Int64 { // 示例输入 let deletionSequence = ["C", "B", "D", "A"] // 构建二叉树 let root = LeafDeletionSequenceToPreorder.buildTreeFromLeafDeletion(deletionSequence) // 输出先序遍历结果 let preorder = LeafDeletionSequenceToPreorder.preorderTraversal(root) println("前序遍历: " + preorder) return 0 }

二、小结

本章为大家详细的介绍了仓颉数据结构与算法中二叉查找树练习题的内容,下一章,为大家带来平衡二叉树的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉数据结构与算法有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

http://www.jsqmd.com/news/830688/

相关文章:

  • OMS-ERP库存WMS管理:实现库存共享与仓位优化的完整指南 [特殊字符]
  • 为Hermes Agent自定义配置Taotoken作为AI能力提供方
  • 盘点那些能让性能翻倍的C++现代特性
  • GPT4All-Chat终极指南:3个实用技巧解决模型下载失败与对话卡顿问题
  • 从MHC到MCC:PIC32项目迁移实战指南与问题排查
  • Workerman-todpole 完整指南:HTML5+WebSocket+PHP 实时交互游戏开发
  • Camo安全机制剖析:如何防止图像劫持与内容篡改的完整指南 [特殊字符]
  • AI写教材必备:低查重工具实测,30分钟生成10万字专业教材!
  • EventQL:专为事件溯源设计的类 SQL 查询语言,让事件存储易用又强大!
  • JS逆向实战:瑞数412会话还原
  • 2026年南京AI搜索推广公司权威榜单 首选南京微尚信息技术有限公司 - 奔跑123
  • 植物大战僵尸 (废物版 杂交版 融合版)2026最新版免费下载(看到请立即转存 资源随时失效)pc手机通用
  • OpenAI IPO 前夕大重组:三大产品线合并,超级应用能否助力突围?
  • osu!framework 项目模板详解:从空项目到完整游戏
  • Word里MathType插件报错?别慌,手把手教你搞定MathPage.wll文件丢失问题
  • 在.NET 5/6控制台项目里,用IronPython 3.4调用Python的requests库做爬虫(附虚拟环境配置)
  • 3D打印螺纹强度提升实战指南:Fusion 360 FDM螺纹优化完整方案
  • 鲸鱼蜣螂算法光伏MPPT优化技术【附代码】
  • Apple Music JS部署与发布:从开发到生产环境的完整流程
  • Blender FLIP Fluids源码解析:深入理解FLIP流体模拟引擎
  • aztfexport完整指南:从零开始将Azure基础设施纳入Terraform管理
  • STM32F030驱动74HC595:硬件SPI与软件SPI的保姆级对比教程(附代码)
  • Hash-Buster未来展望:AI驱动的智能哈希破解技术
  • MATLAB bandpass函数实战:用音乐合成和滤波案例,5分钟搞懂信号处理核心参数
  • 模拟人生4mod整合包下载及安装使用指南(已汉化)2026最新版分享
  • 暗黑破坏神2重制版自动化工具:D2R像素机器人完整指南
  • 保姆级教程:用Allegro 17.4给你的PCB走线“美颜”,从泪滴到渐变线的完整设置与避坑指南
  • ArcMap出图布局避坑指南:从图例乱跑到比例尺不显示,一次搞定所有小毛病
  • Tokio异步运行时CPU绑定实践:提升Rust高并发服务性能
  • 你的电脑风扇为什么总是“神经质“?用FanControl实现智能静音控制的5个关键思维转变