博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
遍历线索化二叉树
阅读量:2339 次
发布时间:2019-05-10

本文共 2103 字,大约阅读时间需要 7 分钟。

遍历线索化二叉树

常规的线索化方式

采用递归地调用的方式,判定条件是当前指针的左子树是否为空

代码实现:

public void midOrder() {
if (this.left != null) {
this.left.midOrder(); } System.out.println(this); if (this.right != null) {
this.right.midOrder(); } }

对比:

但是对二叉树进行线索化之后,不存在空的左右指针,但是单独设置每一个指针的类型,故而条件修改为指针的类型。

代码实现

我的代码
public void midLIst(){
if (this.getLeftType() != 1){
this.getLeft().midLIst(); } System.out.print(this + " "); if (this.getRightType() != 1){
this.getRight().midLIst(); } }

问题分析与总结:

  1. 出现空指针异常,因为到最后一个节点时,其右指针是没有改变,仍旧为null,并且没有对其值进行修改,故而会出现空指针。
代码修改
public void midLIst(){
if (this.getLeftType() != 1){
this.getLeft().midLIst(); } if (this != null){
System.out.println(this + " "); } if (this.getRightType() != 1 && this.getRight() != null){
this.getRight().midLIst(); } }

分析与总结:

针对最尾结点的情况进行修改,尾节点的右指针始终为空,增加判定条件即可

教程代码:

思路实现:

因为二叉树线索化之后,每一个叶子结点的左右指针都将整个二叉树按照对应的顺序链接起来了,所以就可以按照线索化之后的连接彼此的指针进行遍历
代码实现:

public void threadList(){
//代码终止的条件是找到了对应的空指针 HeroArragement hero = root; while (hero != null){
//中序遍历,先找到左边的最初的结点 while (hero.getLeftType() == 0){
hero = hero.getLeft(); } //退出循环就是当前的最左边的节点,并且打印当前节点 System.out.println(hero); //然后开始判定总共是两种情况,一种左右结点不为空,另一种是左右节点为空 //如果是左右都不为后继节点,而是对应的子树 //如果是左右都是后继节点,直接输出 while (hero.getRightType() == 1){
//获取到当前节点的后后继节点,因为当前节点已经输出过了 hero = hero.getRight(); System.out.println(hero); } hero = hero.getRight(); }

分析与总结:

  1. 保证每一次的循环开始都是从对应子树最左边的叶子结点进行循环,都是左指针指向对应前驱节点开始的。
while(hero.getLeftType() == 0){
hero = hero.getLeft(); }
  1. 如果当前传入的结点的右指针所指为后继结点,那就直接输出后继结点,如果不是,那就再往右开始循环。
while(hero.getLeftType() == 1){
hero = hero.getLeft(); System.out.println(hero); }hero = hero.getRight();

转载地址:http://tqgpb.baihongyu.com/

你可能感兴趣的文章
使用FFmpeg实现抠图合并功能(chroma key)
查看>>
长宽比 (视频)
查看>>
Pan & Scan和Letterbox
查看>>
资深影迷不可不知的宽高比:Aspect Ratio 电影画面比例
查看>>
MacBook Pro 外接显示器设置竖屏
查看>>
X264的参考帧设置
查看>>
三种帧的说明
查看>>
感知视频编码
查看>>
深度学习 vs 机器学习 vs 模式识别
查看>>
Tone mapping进化论
查看>>
XAVC
查看>>
详解HDR的三个标准——HLG/HDR10/Dolby Vision
查看>>
流言终结者 1080P全高清都等于高画质?
查看>>
PSNR指标值
查看>>
灰度图像-图像增强 中值滤波
查看>>
两种HDR格式(HLG, HDR10)的理解
查看>>
视频主观质量对比工具(Visual comparision tool based on ffplay)
查看>>
HDMI 接口及CEC信号
查看>>
H.264专利介绍
查看>>
YUV格式小结
查看>>