news 2026/4/21 5:22:40

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉树的遍历和线索二叉树--中序线索二叉树的遍历

一、遍历特点
1. 不需要递归
2. 不需要栈
3. 顺着线索指针,依次访问
4. 遍历顺序依然:左 → 根 → 右


二、先回顾结点标记
- `ltag = 0`:left 是左孩子
- `ltag = 1`:left 是前驱线索

- `rtag = 0`:right 是右孩子
- `rtag = 1`:right 是后继线索


三、遍历完整步骤
步骤1:找到中序遍历第一个结点
从根出发,一直向左走
只要 `ltag == 0` 就继续左走
走到不能左走为止,就是最左下结点
→ 中序第一个访问结点

步骤2:访问当前结点
输出当前结点数据

步骤3:找当前结点的后继结点
分两种情况:
1. `rtag == 1`
右指针是线索
直接 `p = p.right` 就是后继

2. `rtag == 0`
右指针是右孩子
进入右子树,继续往左走到最底端
那个结点就是后继

步骤4:循环
重复 2、3 步,直到 `p == null` 结束


四、遍历口诀
找首结点:一路向左到底
访问结点:直接打印
找后继:
- 右是线索 → 直接跳
- 右是孩子 → 右子树向左到底


五、Java 完整遍历代码

//中序线索二叉树遍历(非递归、不用栈) public void inThreadTraverse(ThreadNode p) { if(p == null) return; //1. 找中序第一个结点:最左下 while(p.ltag == 0){ p = p.left; } //2. 循环遍历所有结点 while(p != null){ System.out.print(p.data + " "); //判断后继 if(p.rtag == 1){ //右是线索,直接后继 p = p.right; }else{ //右是孩子,进入右子树,找最左下 p = p.right; while(p.ltag == 0){ p = p.left; } } } }

六、总结
1. 中序线索树遍历空间复杂度 O(1)
2. 普通二叉树非递归遍历空间 O(h)(栈)
3. 叶子结点左右全是线索,直接顺着走就行
4. 第一个结点:整树最左下
5. 最后一个结点:整树最右下,右线索指向 null
6. 循环线索二叉树首尾相连,不会为空


七、构造 + 遍历对比一句话
-构造线索树:中序遍历 + pre 绑定空指针
-遍历线索树:不用栈递归,顺着前驱后继线索走

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

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

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

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

第14篇:嵌入式核心控制外设:TI C2000 HRPWM模块原理与工业应用

本文将聚焦TI C2000系列微控制器的核心外设——HRPWM(High-Resolution Pulse Width Modulation,高分辨率脉宽调制)模块,面向学生与嵌入式开发者,以严谨正式的风格,从硬件架构、工作原理到实战开发、工业落地…

作者头像 李华
网站建设 2026/4/21 5:11:51

Phi-3.5-mini-instruct开源可部署:GitHub可复现的Phi-3.5轻量服务部署方案

Phi-3.5-mini-instruct开源可部署:GitHub可复现的Phi-3.5轻量服务部署方案 1. 模型概述 Phi-3.5-mini-instruct是微软推出的轻量级指令微调大语言模型,采用Transformer解码器架构,支持128K超长上下文窗口。该模型针对多语言对话、代码生成和…

作者头像 李华