二叉树前、中、后序线索化及遍历
public class ThreadedBinaryTree {public static void main(String[] args){Heronodes node1=new Heronodes(1,"李牧");Heronodes node2=new Heronodes(2,"萧炎");Heronodes node3=new Heronodes(3,"李太玄");Heronodes node4=new Heronodes(4,"周明瑞");Heronodes node5=new Heronodes(5,"克莱恩");Heronodes node6=new Heronodes(6,"老尼尔");Heronodes node7=new Heronodes(7,"邓恩");node1.setLeft(node2);node1.setRight(node3);node2.setParent(node1);node3.setParent(node1);node2.setLeft(node4);node2.setRight(node5);node4.setParent(node2);node5.setParent(node2);node3.setLeft(node6);node6.setParent(node3);node3.setRight(node7);node7.setParent(node3);// ThreadBinaryTree infixBinaryTree=new ThreadBinaryTree(node1);
// infixBinaryTree.infixThreadBinaryTree(node1);
// infixBinaryTree.infixList();// ThreadBinaryTree preBinaryTree=new ThreadBinaryTree(node1);
// preBinaryTree.preTheadBinaryTree(node1);
// preBinaryTree.preList();
//ThreadBinaryTree lastBinaryTree=new ThreadBinaryTree(node1);lastBinaryTree.lastThreadBinaryTree(node1);lastBinaryTree.lastList();}
}class ThreadBinaryTree{private Heronodes root;private Heronodes pre=null;public ThreadBinaryTree(Heronodes root) {this.root = root;}// public void setEachParent(Heronodes node){//待定,给每一个标注出parentNode
// Heronodes preNode=null;
// if (node.getLeft()!=null){
// preNode=node;
// node=node.getLeft();
// node.setParent(preNode);
// }
// setEachParent(node.getLeft());
// if (node.getRight()!=null){
// preNode=
// }
//
//
//
//
//
// }//中序线索化public void infixThreadBinaryTree(Heronodes node){if(node==null){return;}infixThreadBinaryTree(node.getLeft());if(node.getLeft()==null){node.setLeft(pre);node.setLeftType(1);}if (pre!=null&&pre.getRight()==null){pre.setRight(node);pre.setRightType(1);}pre=node;infixThreadBinaryTree(node.getRight());}//中序线索化的遍历public void infixList(){Heronodes node=root;while (node!=null){while (node.getLeftType()!=1){node=node.getLeft();}System.out.println(node);while (node.getRightType()==1){node=node.getRight();System.out.println(node);}node=node.getRight();}}//前序线索化public void preTheadBinaryTree(Heronodes node){if (node==null){return;}if(node.getLeft()==null){node.setLeft(pre);node.setLeftType(1);}if(pre!=null&&pre.getRight()==null){pre.setRight(node);pre.setRightType(1);}pre=node;if(node.getLeftType()!=1){preTheadBinaryTree(node.getLeft());}if (node.getRightType()!=1){preTheadBinaryTree(node.getRight());}}//前序线索化遍历public void preList(){Heronodes node =root;while (node!=null){while (node.getLeftType()!=1){System.out.println(node);node=node.getLeft();}System.out.println(node);node=node.getRight();}}//后序线索化public void lastThreadBinaryTree(Heronodes node){if (node==null){return;}lastThreadBinaryTree(node.getLeft());lastThreadBinaryTree(node.getRight());if (node.getLeft()==null){node.setLeft(pre);node.setLeftType(1);}if (pre!=null&&pre.getRight()==null){pre.setRight(node);pre.setRightType(1);}pre=node;}//遍历后序线索化二叉树public void lastList(){Heronodes node =root;while (node!=null&&node.getLeftType()!=1){node=node.getLeft();}Heronodes preNode=null;while (node!=null){if (node.getRightType()==1){System.out.println(node);preNode=node;node=node.getRight();}else {if (preNode==node.getRight()){System.out.println(node);if (node==root){return;}preNode=node;node=node.getParent();}else {node=node.getRight();while (node!=null&&node.getLeftType()!=1){node=node.getLeft();}}}}}}class Heronodes{private int number;private String name;private Heronodes left;private Heronodes right;private Heronodes parent;private int leftType=0;//leftType=1时,代表前序,leftType=0时,代表左子树 初始情况下为0,后序线索化后将会改变private int rightType=0;//rightType=1时,代表后序,rightType=0时,代表右子树public Heronodes getParent() {return parent;}public void setParent(Heronodes parent) {this.parent = parent;}@Overridepublic String toString() {return "Heronodes{" +"number=" + number +", name='" + name + '\'' +'}';}public Heronodes(int number, String name) {this.number = number;this.name = name;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Heronodes getLeft() {return left;}public void setLeft(Heronodes left) {this.left = left;}public Heronodes getRight() {return right;}public void setRight(Heronodes right) {this.right = right;}public int getLeftType() {return leftType;}public void setLeftType(int leftType) {this.leftType = leftType;}public int getRightType() {return rightType;}public void setRightType(int rightType) {this.rightType = rightType;}
}
其实做下来就一个感觉,真难啊!自己智商根本不够用的感觉,但是诸位,还要坚持!
共勉!
二叉树前、中、后序线索化及遍历相关推荐
- 线索二叉树(前中后序线索化/遍历/画线索)
线索二叉树 文章目录 线索二叉树 1 线索二叉树的基本概念 2 线索二叉树的构造 2.1 线索二叉树的存储结构 2.2 给线索二叉树画线索 2.2.1 中序 2.2.2 先序 2.2.3 后序 2.3 ...
- 【算法系列之线索化二叉树,前序线索化、中序线索化、后序线索化以及遍历~】
1.何谓线索化二叉树 2.线索化二叉树的本质 3.线索化二叉树的存储结构 4.构建线索化二叉树 4.1.先序线索化 4.2.中序线索化 4.3.后序线索化 5.遍历线索化二叉树 5.1.先序遍历 先序 ...
- 二叉树前中后序遍历以及节点计算
二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...
- 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解
前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...
- 二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】
文章目录 1. 二叉树基础操作 1.1 二叉树遍历 1.1.1 前序遍历 前序遍历(Pre-Order Traversal) 1.1.2 中序遍历 中序遍历(In-Order Traversal) 1 ...
- Java实现前中后序线索化二叉树以及遍历
文章目录 一.线索化二叉树的原理 二.构建线索化二叉树 三.代码实现线索二叉树 一.线索化二叉树的原理 在前面介绍二叉树的文章中提到,二叉树可以使用两种存储结构:顺序存储和链式存储,在使用链式存储时, ...
- JAVA 二叉树 常见操作合集(前中后序递归非递归遍历 层序遍历 求深度宽度 判断兄弟结点 堂兄弟节点)
今天复习了二叉树的相关操作,整理归纳如下. 二叉树结点定义 //节点类private static class TreeNode{private int val = 0;private TreeNod ...
- 二叉树(前中后序递归非递归遍历,层次遍历
#ifndef _BITREE_H #define _BITREE_H #include "Stack.h" #include "Queue.h" te ...
- 【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题
写在前面 学习二叉树结构,最简单的方式就是遍历.所谓二叉树遍历,就是按照某种特定的规则,一次对二叉树中的节点进行相应的操作,并且每个节点只操作一次. 访问节点所做的操作要看具体的应用问题.遍历是二叉树 ...
最新文章
- 【组队学习】十月组队学习内容详情!(第30期)
- python【接上篇】
- 27 个问题,告诉你Python为什么这么设计
- 阿里《Java开发手册》中的 1 个bug!
- Java冒泡实现类Collections.sort()
- JEECG 喜讯[后续推出功能]
- px4代码解析(3)
- 后端开发工具:反编译工具、VS插件、.NET Framework源码地址
- Windows xp下IDT Hook和GDT的学习
- Jetbrain系列IDE设置
- 项目管理—成本效益分析
- iOS动态库和静态库的运用
- Unrecognized Windows Sockets error: 10106: create解决方案
- 视频教程-用友U8视频教程全集(合同管理)-ERP
- js切换图片会闪动_js 特效 当鼠标经过的时候 图片闪一下光
- rtthread + STM32F407VE + esp8266 +SD卡 从网络下载文件存到SD卡中
- 抖音seo是怎么做的?抖音seo排名规则,操作流程
- 可拖动菜单 【总结】
- comsol光学仿真01
- c语言10 u0010求余怎么求,矩阵LU分解求逆详细分析与C语言实现.docx
热门文章
- VMware中linux环境下oracle安装图文教程(一)
- 「有趣」基因组上除了ATCGN还能有什么字符
- 数据结构与算法python语言实现-第四章答案
- 好久不见——洗尽铅华后的释然放手
- 【JavaWeb - 网页编程】一 HTML技术与CSS技术
- 分数求和的三种方法(1/1-1/2+1/3-1/4+1/5+...+1/n)
- C语言扫雷函数成绩,C语言实现扫雷
- 个人对宏观经济学的理解
- 天地超云高温一体机的耐热秘诀
- LTE入门, 从这本书开始