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

二叉搜索树(BST)与哈夫曼树(HFM)

本篇我们以搜索树和哈夫曼树为例探究二叉树建立和遍历过程。二叉树定义二叉树 是一种有限的、非线性的树形数据结构每个节点最多只有两个子节点分别称为左孩子左子树、右孩子右子树搜索树概念1.左子树上所有节点值 根节点值2.右子树上所有节点值 根节点值3.左右子树也必须各自是二叉搜索树搜索树类自定义类MTree创建节点类TreeNodeclass TreeNode{publicintdata;public TreeNode left;public TreeNode right;publicTreeNode(intdata){this.datadata;}}在MTree类中定义全局变量 root 作为根节点public TreeNode root;定义建树的方法判断原先是否有根节点进而判断当前节点curr和存入节点值的大小以及该节点是否存在左右子树来确定放入节点的位置publicvoidcreateTree(TreeNode node){if(rootnull){rootnode;}else{TreeNode currroot;while(true){if(curr.datanode.data){if(curr.leftnull){curr.leftnode;break;}currcurr.left;}else{if(curr.rightnull){curr.rightnode;break;}currcurr.right;}}}}二叉树中序遍历栈方法创建栈对象stack判断当前指针不为空或栈里还有节点如果当前节点不为空就把当前节点压入栈更新 curr 若为空则说明节点走到最左边了出栈回弹并打印当前值。接着节点赋给当前节点右边继续遍历publicvoidinorde(TreeNode root){TreeNode currroot;StackTreeNodestacknew Stack();while(curr!null||!stack.isEmpty()){if(curr!null){//压栈stack.push(curr);currcurr.left;}else{//出栈currstack.pop();//打印节点System.out.println(curr.data );currcurr.right;}}}二叉树前序遍历栈方法创建栈对象stack判断当前指针不为空或栈里还有节点如果当前节点不为空打印当前节点父节点当前节点压栈用于之后寻找右子树一路遍历左子树否则弹出栈中当前节点转向遍历它右子树publicvoidpreorder(TreeNode root){TreeNode currroot;StackTreeNodestacknew Stack();while(curr!null||!stack.isEmpty()){if(curr!null){System.out.println(curr.data );stack.push(curr);currcurr.left;}else{currstack.pop();currcurr.right;}}}二叉树后序遍历栈方法定义pre来记录上一个被打印访问的节点往左一直走到底走完后拿到栈顶节点不弹出取出栈顶判断能不能打印这个节点接着满足以下任意一种情况即可打印当前栈顶节点1.没有右子树 2.右子树已经全部遍历、打印完了。弹出节点、打印节点更新 pre 为当前刚打印的节点标记右子树已走完publicvoidpostorder(TreeNode root){TreeNode currroot;StackTreeNodestacknew Stack();TreeNode prenull;while(curr!null||!stack.isEmpty()){if(curr!null){stack.push(curr);currcurr.left;}else{TreeNode topstack.peek();//右边为空或右边已经走完if(top.rightnull||top.rightpre){stack.pop();System.out.println(top.data );pretop;}else{//右边没走完去右边currtop.right;}}}}二叉树的中序遍历递归publicvoidinorde(TreeNode root){if(root!null){inorde(root.left);System.out.println(root.data );inorde(root.right);}}最后定义测试方法创建数组用TreeNode类创建的对象来存数组中的值创建二叉树进行遍历publicstaticvoidmain(String[]args){intarr[]{4,3,5,7,1,2,9};MTree treenewMTree();for(inti0;iarr.length;i){TreeNode nodenewTreeNode(arr[i]);tree.createTree(node);}tree.inorde(tree.root);tree.preorder(tree.root);tree.postorder(tree.root);}测试结果如图以中序遍历为例哈夫曼树概念1.把所有叶子权值从小到大排序2.选出权值最小的两个节点3.合成一个新父节点父节点权值 两节点之和4.把新父节点放回集合重复以上步骤5.直到只剩一个节点就是哈夫曼树根。哈夫曼树类自定义类HmfTree创建节点类TreeNode定义全局变量root。为了方便取出列表中最小两个数值先对传入的列表进行排序这里用冒泡排序定义排序方法publicvoidsort(ListTreeNodenodeList){for(inti0;inodeList.size();i){for(intj0;jnodeList.size()-1;j){if(nodeList.get(j).datanodeList.get(j1).data){TreeNode tempnodeList.get(j);nodeList.set(j,nodeList.get(j1));nodeList.set(j1,temp);}}}}定义创建哈夫曼树的方法注意方法最后要将排序列表中首位置元素传给作为根节点的 root publicvoidcreateTree(ListTreeNodenodeList){while(nodeList.size()1){//对nodeList升序排序sort(nodeList);//找到最小两个节点TreeNode leftnodeList.remove(0);TreeNode rightnodeList.remove(0);//构建子树TreeNode nodenewTreeNode(left.dataright.data);node.leftleft;node.rightright;//新节点添加到集合中nodeList.add(node);}rootnodeList.get(0);}中序遍历叶子节点思路类比上面搜索树另外在出栈时添加一步对弹出节点右子树是否存在的判断。上面逻辑已经遍历到最左边子树了publicvoidinorder(){TreeNode currroot;StackTreeNodestacknew Stack();while(curr!null||!stack.isEmpty()){if(curr!null){//压栈stack.push(curr);currcurr.left;}else{//出栈TreeNode nodestack.pop();//打印节点if(node.rightnullnode.leftnull){System.out.println(node.data );}currnode.right;}}}最后写测试方法publicstaticvoidmain(String[]args){int[]arr{4,2,1,6};ListTreeNodenodeListnew ArrayList();for(inti0;iarr.length;i){nodeList.add(newTreeNode(arr[i]));}HfmTree hfmnewHfmTree();hfm.createTree(nodeList);hfm.inorder();}演示结果如图

相关文章:

二叉搜索树(BST)与哈夫曼树(HFM)

本篇,我们以搜索树和哈夫曼树为例,探究二叉树建立和遍历过程。 二叉树定义: 二叉树 是一种有限的、非线性的树形数据结构,每个节点最多只有两个子节点,分别称为:左孩子(左子树)、右孩…...

3大核心功能+5分钟上手:Lumafly让你的空洞骑士模组管理轻松又高效

3大核心功能5分钟上手:Lumafly让你的空洞骑士模组管理轻松又高效 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly 还在为空洞骑士模组安装的繁琐流程…...

如何快速备份微信聊天记录:终极完整导出指南

如何快速备份微信聊天记录:终极完整导出指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因为手机丢失或更换设备,而遗憾地丢失了重要…...

如何在5分钟内免费创建专业EPUB电子书:EPubBuilder终极指南

如何在5分钟内免费创建专业EPUB电子书:EPubBuilder终极指南 【免费下载链接】EPubBuilder 一款在线的epub格式书籍编辑器 项目地址: https://gitcode.com/gh_mirrors/ep/EPubBuilder 想要制作专业电子书却苦于复杂的技术门槛?EPubBuilder为你提供…...

终极指南:用WarcraftHelper让魔兽争霸III在Windows 11完美运行

终极指南:用WarcraftHelper让魔兽争霸III在Windows 11完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在现代电…...

Linux基础命令(系统信息类)

今天给大家展示一下多用于查看系统状态信息的命令,分别是lscpu,free,df,uptime,uname以及wlscpu #查看cpu信息Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s…...

00华夏之光永存:黄大年茶思屋榜文解法 鸿蒙生态全场景通信核心卡脖子难题前瞻解析

华夏之光永存:黄大年茶思屋榜文解法「难题揭榜第9期 全5题」 鸿蒙生态全场景通信核心卡脖子难题深度解析 ——第0篇:题目全貌、卡脖子定位与技术价值前瞻 一、摘要 本文为华为黄大年茶思屋难题揭榜第9期前瞻解析篇(第0篇)&#xf…...

3步掌握Ryzen处理器终极调试:SMUDebugTool完全指南

3步掌握Ryzen处理器终极调试:SMUDebugTool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitco…...

Realistic Vision V5.1 产品级应用展示:从概念草图到高清渲染图

Realistic Vision V5.1 产品级应用展示:从概念草图到高清渲染图 最近在尝试用AI辅助产品设计,发现Realistic Vision V5.1这个模型在生成写实风格图像方面,确实有点东西。它不像一些模型那样,生成的东西总带着一股“塑料感”或者“…...

当LLM输出准确率突破99.2%,内容运营KPI考核体系必须重写的4个硬性条件(奇点大会技术委员会强制建议稿)

第一章:当LLM输出准确率突破99.2%,内容运营KPI考核体系必须重写的4个硬性条件(奇点大会技术委员会强制建议稿) 2026奇点智能技术大会(https://ml-summit.org) 当大语言模型在标准行业测试集(如ContentQA-2025 v3.1&am…...

Ostrakon-VL-8B一键部署与MySQL数据持久化实战

Ostrakon-VL-8B一键部署与MySQL数据持久化实战 最近在折腾多模态大模型,发现Ostrakon-VL-8B这个模型挺有意思的,既能看懂图片,又能跟你聊天,还能根据图片生成描述。不过,用着用着就发现一个问题:每次调用产…...

如何快速掌握SMUDebugTool:Ryzen处理器调试实用指南

如何快速掌握SMUDebugTool:Ryzen处理器调试实用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitc…...

2026年3款降AI工具处理博士论文效果对比:10万字全文稳定性测评

2026年3款降AI工具处理博士论文效果对比:10万字全文稳定性测评 同一篇论文,用了四款工具分别处理,记录了所有检测结果。 先给结论:嘎嘎降AI(www.aigcleaner.com)效果最稳定,价格也最低&#x…...

开源光学材料数据库:突破传统限制的3000+材料折射率解决方案

开源光学材料数据库:突破传统限制的3000材料折射率解决方案 【免费下载链接】refractiveindex.info-database Database of optical constants 项目地址: https://gitcode.com/gh_mirrors/re/refractiveindex.info-database 在光学工程和材料科学研究中&#…...

【后端作业W7】 RuoYi-Vue v3.8.2 实战:单表 CRUD 独立接口开发与 API 测试全记录

一、 前言 本周的实战任务基于企业级开源框架 RuoYi-Vue v3.8.2 进行。与前两周纯手写的 SpringBoot 项目不同,若依框架内置了庞大的组件和严密的安全鉴权体系(Spring Security)。 本次作业的核心目的并非依赖代码生成器完成任务,…...

zmq源码分析之mailbox_t

文章目录 概述 核心结构 核心成员及其作用 公开接口 1. 构造函数 2. 获取文件描述符 3. 发送命令 4. 接收命令 工作原理 命令传递流程 状态转换 技术特点 1. 线程安全设计 2. 高效的事件通知 3. 跨平台支持 4. Fork 安全 与其他组件的关系 使用场景 性能优化点 技术细节 1. 命令…...

BabelDOC:打破PDF翻译格式壁垒的智能文档处理引擎

BabelDOC:打破PDF翻译格式壁垒的智能文档处理引擎 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 在全球化协作与知识共享的浪潮中,PDF文档的跨语言翻译一直是个技术难题…...

StructBERT语义分析平台:快速搭建中文复述识别系统

StructBERT语义分析平台:快速搭建中文复述识别系统 1. 平台概述与核心价值 中文语义相似度计算是自然语言处理中的基础任务,广泛应用于智能客服、文本查重、问答系统等场景。StructBERT作为阿里巴巴开源的预训练语言模型,在中文语义理解任务…...

解构 OPC:带你了解其背后的技术真实与商业幻觉

写在前面过去半年,“OPC”这三个字母在创投圈和开发者社区里刷屏。一人公司、一万块 GPU、数十亿估值——Sam Altman 在 2024 年丢下的那句预言,正在被反复引用,变成一种商业叙事的模板。政府出台扶持政策,清华发布研究报告&#…...

终极Windows驱动清理指南:简单三步释放20GB磁盘空间

终极Windows驱动清理指南:简单三步释放20GB磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现C盘空间越来越少,系统运行越来越慢?这…...

终极指南:如何用NHSE轻松打造你的完美动森岛屿

终极指南:如何用NHSE轻松打造你的完美动森岛屿 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否曾为错过季节性活动道具而烦恼?是否觉得岛屿改造工程太过耗时&#xf…...

基于SpringBoot + Vue的基于Web的跳蚤市场管理系统

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...

如何分析Data Guard的网络瓶颈_Bandwidth与Redo传输速率的计算公式

swag 是 Go 最成熟的 OpenAPI 文档生成工具,通过解析源码注释生成 swagger.json;需在项目根目录执行 swag init,handler 函数须带完整注释块且紧贴声明,结构体字段需 json tag,Gin/Echo 需手动注入 Swagger UI 路由。G…...

小红书关键词批量提取评论使用说明分享

小红书笔记关键词搜索笔记批量提取评论使用说明弄完抖音的评论采集,又用c#写了一个小红书的评论采集同样还是采用C# 还是客户端服务端数据库功能方向:主要用通过关键词搜索笔记进行笔记的评论采集,当然了既然能通过关键词能搜索笔记采集评论。…...

Blender + AI 如何结合使用?

Blender 本身原生无内置AI,所有AI能力都靠第三方插件、外部AI平台联动、本地大模型对接实现,覆盖AI建模、AI材质纹理、AI渲染风格化、AI场景脚本控制、AI动画五大核心工作流。下面给你完整工具清单、安装流程、实操步骤、全套工作流与新手入门方案&#…...

CSS如何实现带有纹理叠加的图片背景_利用背景图像与混合模式

常见错误是未设置 background-blend-mode 且纹理图层顺序/尺寸不匹配,导致仅显示底图;应将纹理放后、用 PNG 透明图、设 background-size 并选合适混合模式。background-image 叠加纹理时为什么看不到效果常见错误是直接用两个 background-image 写在一起…...

信科赛(原大唐杯)电信业务仿真 --部分新加内容

全部都要自己填,务必完全背会...

體驗 Python 自動化的力量:從網頁抓取開始

在學習如何使用 Python 自動化程序來獲取相關網頁內容的過程中,我深刻體會到了自動化的力量。透過使用像是 requests 和 BeautifulSoup 這樣的庫,我能夠輕鬆地從網頁中提取所需的信息,這不僅提高了我的工作效率,也讓我對網頁結構有…...

保姆级教学:Qwen3-4B-Instruct-2507镜像部署,vLLM服务+Chainlit调用一步到位

保姆级教学:Qwen3-4B-Instruct-2507镜像部署,vLLM服务Chainlit调用一步到位 1. 环境准备与快速部署 1.1 镜像获取与启动 Qwen3-4B-Instruct-2507镜像已预装vLLM推理框架和Chainlit交互界面,部署过程简单高效。启动步骤如下: 在…...

ViGEmBus虚拟游戏控制器驱动:终极完整指南与快速安装教程

ViGEmBus虚拟游戏控制器驱动:终极完整指南与快速安装教程 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过心爱的游戏控制器无法…...