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

二叉树的遍历和线索二叉树--中序线索二叉树的构造

一、为什么要用线索二叉树普通二叉链表- n 个结点一共2n 个指针域- 真正指向孩子的指针只有 n-1 个- 剩余 n1 个空指针空间浪费解决办法利用空左、空右指针存放中序遍历的前驱、后继结点加上标记位区分就是中序线索二叉树二、线索结点结构数据 data 左指针 lchild 左标记 ltag 右指针 rchild 右标记 rtag- ltag 0lchild 指向左孩子- ltag 1lchild 是前驱线索- rtag 0rchild 指向右孩子- rtag 1rchild 是后继线索三、构造核心规则中序左→根→右1. 按照中序遍历顺序递归遍历整棵树2. 定义全局指针 pre永远记录上一个访问过的结点3. 当前结点左孩子为空→ 左指针指向 preltag14. 前驱结点 pre 右孩子为空→ pre 右指针指向当前结点pre.rtag15. 遍历完当前结点更新 pre 当前结点四、一步步构造流程画图逻辑1. 初始化 pre null2. 递归线索化左子树3. 处理当前根结点绑定前驱线索4. 绑定前驱结点到当前结点的后继线索5. 更新前驱 pre6. 递归线索化右子树五、Java 标准构造代码1.线索结点类class InThreadNode { int data; InThreadNode left; InThreadNode right; int ltag; //0左孩子 1前驱线索 int rtag; //0右孩子 1后继线索 public InThreadNode(int data) { this.data data; left null; right null; ltag 0; rtag 0; } }2.中序线索化核心递归代码public class ThreadTree { static InThreadNode pre null; //记录前驱结点 //中序遍历实现二叉树线索化 public void createInThread(InThreadNode root) { if (root null) return; //1.递归线索化左子树 createInThread(root.left); //2.处理当前结点左空 → 指向前驱 if (root.left null) { root.left pre; root.ltag 1; } //3.处理前驱结点右空 → 指向当前结点后继 if (pre ! null pre.right null) { pre.right root; pre.rtag 1; } //前驱后移 pre root; //4.递归线索化右子树 createInThread(root.right); } }六、中序线索二叉树遍历不用栈、不用递归//线索树遍历 public void threadTraverse(InThreadNode root){ InThreadNode p root; //找到中序第一个结点最左下 while(p ! null p.ltag 0){ p p.left; } while(p ! null){ System.out.print(p.data ); //右是线索直接走后继 if(p.rtag 1){ p p.right; } //右是孩子找右子树最左下结点 else{ p p.right; while(p ! null p.ltag 0){ p p.left; } } } }七、考点1. 线索化本质 一次完整中序遍历2. pre 是连接前驱后继的关键3. 叶子结点左右指针全部是线索4. 线索二叉树无需递归、无需栈即可遍历5. n 个结点二叉链表固定空指针数量n1 个6. 中序线索树找前驱后继最简单先序、后序很复杂八、优缺点优点- 充分利用空闲指针不额外占用空间- 非递归快速遍历- 快速查询结点遍历前驱、后继缺点- 插入、删除结点麻烦需要重新修改所有线索- 树结构改动代价大

相关文章:

二叉树的遍历和线索二叉树--中序线索二叉树的构造

一、为什么要用线索二叉树 普通二叉链表: - n 个结点,一共2n 个指针域 - 真正指向孩子的指针只有 n-1 个 - 剩余 n1 个空指针,空间浪费解决办法: 利用空左、空右指针,存放中序遍历的前驱、后继结点 加上标记位区分&…...

别再被‘Already up-to-date’骗了!手把手教你用git status和git reset解决文件不更新的坑

当Git说"Already up-to-date"却未更新文件时,如何彻底解决这个陷阱 你是否遇到过这样的情况:执行git pull后,终端愉快地告诉你"Already up-to-date",但当你打开文件时,却发现内容根本没有更新&…...

C3 vs Zig:2026年,谁才是真正能“修复”C语言的救星?

一、C语言的“中年危机”,终被两位“挑战者”打破? 作为编程界的“老大哥”,C语言统治系统级开发数十年,从操作系统内核到嵌入式设备,处处都有它的身影。但不可否认,随着技术迭代,C语言的短板越…...

华为坤灵,如何解闽商智能化之需? - 科技行者

2026年,“十五五”规划开局之年,“打造智能经济新形态”被首次写入政府工作报告,中国智能化转型由此也进入到了全新阶段。这一年,人工智能不再停留在对话生成,而是朝着具备规划、执行、反馈能力的智能体方向演进&#…...

AI+3D赋能文科教学:15个可直接使用的高质量可视化Prompt(历史/地理/文化)

在大多数人的认知中,3D可视化、WebGL、Three.js 这些技术似乎更多应用于理科领域,比如物理模拟、数学建模等。但实际上,随着 AI 生成能力的发展,文科内容同样可以通过 3D 交互的方式进行重构,实现更直观、更沉浸的学习…...

官渡区附近最靠谱的减震器维修店

在官渡区开了这么多年车,大家肯定都遇到过车辆减震器方面的问题吧?减震器故障会影响驾驶的舒适性,甚至威胁行车安全。那么,官渡区附近有没有靠谱的减震器维修店呢?今天就给大家好好推荐一家——车医汽车服务&#xff0…...

轻量的C++命令行交互器2.0

上次写了一个C命令行交互器(基于GNU g),简介看上一篇文章。这次主要增加一点新功能和修复bug。新功能:1.上下键回溯,回溯的内容仅限已经输入并使用回车提交的内容,可在普通模式、全模式、半编辑器模式&…...

数据库模型设计实战:如何正向工程从模型建表_规范化项目开发流程

建表时必须同时设 NOT NULL 和默认值以确保语义一致;外键字段名应反映业务角色而非模型关系;JSONField 需按数据库能力谨慎使用;时间字段统一存 UTC,时区转换延后至展示层。建表前必须确认 NOT NULL 和默认值的语义是否一致很多团…...

Python中如何进行NumPy多项式拟合_使用polyfit实现回归

结论:numpy.polyfit拟合关键在阶数选择、x/y对齐与结果使用;常见错误是x/y传反、y未压平、阶数过高致过拟合;coeffs为降幂排列,预测应统一用np.polyval。直接说结论:用 numpy.polyfit 做多项式拟合,核心不是…...

GBase 8a之聚合函数: 计算峰度功能的实现

主要解决问题(1) 目前系统缺少求峰度的功能。特编写可以实现该功能的so以应对。部署方式(1) 将文件libkurtosis.so 放在集群对应的$GBASE_HOME/lib/gbase/plugin $GCLUSTER_HOME/lib/gbase/plugin 目录下 (2&#x…...

Qwen3-Reranker参数详解:max_length、batch_size与显存占用关系

Qwen3-Reranker参数详解:max_length、batch_size与显存占用关系 1. 理解Qwen3-Reranker的核心参数 在实际使用Qwen3-Reranker进行语义重排序时,有三个关键参数直接影响着系统的性能和资源消耗:max_length、batch_size和显存占用。理解这些参…...

**标题:MLOps实战进阶:用Python + Docker + Airflow打造自动化机器学习

标题:MLOps实战进阶:用Python Docker Airflow打造自动化机器学习流水线 在现代AI项目中,模型开发不再是“一次性任务”,而是持续迭代、版本控制、部署监控的完整生命周期管理过程。这正是 MLOps(Machine Learning Op…...

数据库漏洞自动同步,KubeBlocks Addon 安全能力再升级

前言 在云原生时代,企业越来越多地将 MySQL、Redis、MongoDB、Kafka 等数据库和中间件部署在 Kubernetes 上。随之而来的,是日益严峻的安全挑战:你部署的数据库版本是否存在已知漏洞?哪些 CVE 会影响当前集群?如何及时…...

如何处理SQL查询中的逻辑重叠:AND OR嵌套优先级.txt

<details> 中 <summary> 必须是第一个直接子元素&#xff0c;不可嵌套或包裹在其他标签内&#xff1b;支持默认展开&#xff08;open 布尔属性&#xff09;、JS 控制&#xff08;el.open false&#xff09;、toggle 事件监听&#xff1b;兼容性需注意 IE 不支持&a…...

Real-Anime-Z实战教程:用Jupyter Lab动态加载不同LoRA并批量生成对比图

Real-Anime-Z实战教程&#xff1a;用Jupyter Lab动态加载不同LoRA并批量生成对比图 1. 项目介绍 Real-Anime-Z是一款基于Stable Diffusion技术的写实向动漫风格大模型&#xff0c;由Devilworld团队开发。它巧妙融合了写实与动漫两种风格特点&#xff0c;创造出独特的2.5D视觉…...

CSS如何实现响应式图片懒加载动画_结合CSS关键帧与占位符技术

...

AI修图师行业落地:教育领域课件插图智能编辑实践

AI修图师行业落地&#xff1a;教育领域课件插图智能编辑实践 1. 引言&#xff1a;当老师遇上AI修图师 想象一下这个场景&#xff1a;一位中学地理老师正在准备下周的《地球公转与四季变化》课件。她找到了一张完美的地球公转示意图&#xff0c;但图片背景是纯白色的&#xff…...

怎样使用Navicat高级特权进行从备份中提取单表数据_企业数据保护

Navicat 不支持从备份中直接提取单表&#xff0c;“高级特权”是误传&#xff1b;仅纯文本 .sql 备份&#xff08;如 mysqldump 生成&#xff09;可通过文本处理提取&#xff0c;.ncb 等专有格式须全库还原后导出。Navicat 没有“高级特权”这个功能模块navicat 本身不提供所谓…...

[特殊字符] Nano-Banana实战教程:为新产品发布会同步生成全套拆解视觉素材

Nano-Banana实战教程&#xff1a;为新产品发布会同步生成全套拆解视觉素材 1. 项目简介 想象一下这样的场景&#xff1a;你的新产品即将发布&#xff0c;需要制作精美的拆解图、爆炸图、部件平铺展示图&#xff0c;但设计师忙不过来&#xff0c;外包又贵又慢。这时候&#xf…...

MSP/PSP

定义MSP 是 Main Stack Pointer&#xff0c;中文通常叫&#xff1a;主栈指针或者 主栈在 Cortex-M 内核里&#xff0c;CPU 有 两个栈指针&#xff1a;MSP&#xff1a;Main Stack PointerPSP&#xff1a;Process Stack Pointer直观理解你可以把它理解成&#xff1a;PSP&#xff…...

MedGemma 1.5真实案例:‘腹痛+发热+白细胞升高’的鉴别诊断思维链输出

MedGemma 1.5真实案例&#xff1a;‘腹痛发热白细胞升高’的鉴别诊断思维链输出 1. 案例背景与患者情况 今天我们来分析一个真实的临床案例&#xff0c;展示MedGemma 1.5在医疗诊断推理中的强大能力。这个案例涉及一位虚拟患者&#xff0c;主要症状包括&#xff1a; 腹痛&am…...

Educational Codeforces Round 120 (Rated for Div. 2) vp补题

文章目录C 贪心 策略D 组合数学 容斥原理E 状压 绝对值 贪心参考Ander 的题解 C 贪心 策略 基本策略&#xff1a;操作1改小的&#xff0c;让大的数进行操作2变成小的 void solve(){int n,k;cin>>n>>k;vector<int>a(n1),pre(n1,0);int sm0;forr(i,1,n)cin>…...

5大创新功能:CodeCombat如何让编程学习像玩游戏一样上瘾

5大创新功能&#xff1a;CodeCombat如何让编程学习像玩游戏一样上瘾 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 你是否曾经想过&#xff0c;学习编程可以像玩角色扮演游戏一样充满乐趣和成就…...

YOLO X Layout快速部署:systemd服务脚本守护app.py进程,异常自动重启

YOLO X Layout快速部署&#xff1a;systemd服务脚本守护app.py进程&#xff0c;异常自动重启 1. 项目简介与核心价值 YOLO X Layout是一个基于YOLO模型的智能文档版面分析工具&#xff0c;能够自动识别文档中的各种元素类型。这个工具特别适合需要处理大量文档的场景&#xf…...

芯片逆向工程与专利分析的技术实践与法律风险

1. 芯片逆向工程的行业现状与技术痛点在半导体行业摸爬滚打十几年&#xff0c;我见过太多公司一边公开否认、一边私下大搞逆向工程的"行业潜规则"。这就像厨艺界的秘密配方破解——大家都说尊重原创&#xff0c;但谁不想知道对手的独门秘方&#xff1f;逆向工程本质上…...

如何在 Vite + React 项目中禁用自动热更新(HMR)

本文详解如何在 vite 开发服务器中彻底禁用热模块替换&#xff08;hmr&#xff09;&#xff0c;避免长时间操作&#xff08;如大文件上传、复杂计算&#xff09;因页面自动刷新而中断进度&#xff0c;同时提供配置示例与关键注意事项。 本文详解如何在 vite 开发服务器中彻…...

VBA-JSON终极指南:让Office应用轻松处理JSON数据的完整解决方案

VBA-JSON终极指南&#xff1a;让Office应用轻松处理JSON数据的完整解决方案 【免费下载链接】VBA-JSON JSON conversion and parsing for VBA 项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSON 在当今数据驱动的办公环境中&#xff0c;处理JSON数据已成为VBA开发者…...

程序员鱼皮AI智能体项目学习体验分享|给Java学习者的真实参考

各位正在学习Java的小伙伴们&#xff0c;大家好&#xff5e; 最近我刚完整做完程序员鱼皮的AI智能体项目&#xff0c;发现不少同学对这个项目很感兴趣&#xff0c;结合我自己的学习全过程和真实感受&#xff0c;今天就来跟大家好好分享一波&#xff0c;也给纠结要不要学这个项目…...

拯救者工具箱:让你的联想笔记本性能翻倍的开源神器

拯救者工具箱&#xff1a;让你的联想笔记本性能翻倍的开源神器 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 还在为联想官…...

华硕枪神8/8Plus 超竞版 G634J G614J G814J G814J 原厂Win11 22H2系统分享下载-宇程系统站

华硕枪神8/8Plus超竞版配备了一键恢复功能&#xff0c;可帮助用户在系统异常或更换硬盘后轻松恢复原厂Win11 22H2系统及隐藏恢复分区。支持包括G634JYR、G614JIR、G814JVR等在内的多款型号。通过使用原厂提供的工厂文件&#xff0c;用户能够确保系统恢复至出厂状态&#xff0c;…...