news 2026/5/16 21:34:04

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
跟我一起学“仓颉”算法-二叉查找树练习题

目录

一、练习题

二、小结


一、练习题

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 }

二、小结

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 21:32:14

实时流处理专家指南:Apache Spark Streaming架构与最佳实践

实时流处理专家指南&#xff1a;Apache Spark Streaming架构与最佳实践 【免费下载链接】awesome-spark A curated list of awesome Apache Spark packages and resources. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-spark Apache Spark Streaming是Apache …

作者头像 李华
网站建设 2026/5/16 21:32:13

磁芯电感系数AL的物理本质与工程应用详解

1. 磁芯电感系数AL的引入&#xff1a;从“绕多少圈”到“一个数”做电源或者搞磁件设计的朋友&#xff0c;对“AL值”这个参数肯定不陌生。选磁芯、算电感&#xff0c;第一件事就是翻看磁芯的Datasheet&#xff0c;找到那个标着“AL”的数值&#xff0c;单位通常是nH/N或者μH/…

作者头像 李华
网站建设 2026/5/16 21:29:50

Notion API Go客户端社区贡献指南:如何参与开源项目开发

Notion API Go客户端社区贡献指南&#xff1a;如何参与开源项目开发 【免费下载链接】notionapi Unofficial Go API for Notion.so 项目地址: https://gitcode.com/gh_mirrors/no/notionapi Notion API Go客户端是一个非官方的Go语言实现&#xff0c;为开发者提供了与No…

作者头像 李华
网站建设 2026/5/16 21:28:06

RT-Thread移植双核Cortex-A7实战:从启动流程到SMP调优全解析

1. 项目概述与核心价值最近在折腾一块基于双核Cortex-A7架构的国产开发板&#xff0c;想把rt-thread这个优秀的实时操作系统给移植上去。这活儿听起来挺硬核&#xff0c;但实际做下来&#xff0c;你会发现它更像是一场精心策划的“搬家”工程——把rt-thread这个“房客”请到一…

作者头像 李华
网站建设 2026/5/16 21:28:05

鸿蒙微内核架构解析:从IPC优化到形式化验证的安全设计

1. 从“大”到“微”&#xff1a;一次内核架构的范式转移聊到操作系统内核&#xff0c;很多开发者朋友的第一反应可能是Linux那庞大而复杂的宏内核&#xff08;Monolithic Kernel&#xff09;。确实&#xff0c;Linux的成功证明了宏内核在通用计算领域的强大生命力&#xff0c;…

作者头像 李华
网站建设 2026/5/16 21:27:13

暗黑破坏神2重制版自动化工具:D2R像素机器人完整指南

暗黑破坏神2重制版自动化工具&#xff1a;D2R像素机器人完整指南 【免费下载链接】botty D2R Pixel Bot 项目地址: https://gitcode.com/gh_mirrors/bo/botty 你是否厌倦了在暗黑破坏神2重制版中重复刷怪、拾取物品的繁琐操作&#xff1f;想要解放双手&#xff0c;让游戏…

作者头像 李华