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. 线索二叉树(前中后序线索化/遍历/画线索)

    线索二叉树 文章目录 线索二叉树 1 线索二叉树的基本概念 2 线索二叉树的构造 2.1 线索二叉树的存储结构 2.2 给线索二叉树画线索 2.2.1 中序 2.2.2 先序 2.2.3 后序 2.3 ...

  2. 【算法系列之线索化二叉树,前序线索化、中序线索化、后序线索化以及遍历~】

    1.何谓线索化二叉树 2.线索化二叉树的本质 3.线索化二叉树的存储结构 4.构建线索化二叉树 4.1.先序线索化 4.2.中序线索化 4.3.后序线索化 5.遍历线索化二叉树 5.1.先序遍历 先序 ...

  3. 二叉树前中后序遍历以及节点计算

    二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...

  4. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

  5. 二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】

    文章目录 1. 二叉树基础操作 1.1 二叉树遍历 1.1.1 前序遍历 前序遍历(Pre-Order Traversal) 1.1.2 中序遍历 中序遍历(In-Order Traversal) 1 ...

  6. Java实现前中后序线索化二叉树以及遍历

    文章目录 一.线索化二叉树的原理 二.构建线索化二叉树 三.代码实现线索二叉树 一.线索化二叉树的原理 在前面介绍二叉树的文章中提到,二叉树可以使用两种存储结构:顺序存储和链式存储,在使用链式存储时, ...

  7. JAVA 二叉树 常见操作合集(前中后序递归非递归遍历 层序遍历 求深度宽度 判断兄弟结点 堂兄弟节点)

    今天复习了二叉树的相关操作,整理归纳如下. 二叉树结点定义 //节点类private static class TreeNode{private int val = 0;private TreeNod ...

  8. 二叉树(前中后序递归非递归遍历,层次遍历

    #ifndef _BITREE_H  #define   _BITREE_H  #include "Stack.h" #include "Queue.h" te ...

  9. 【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题

    写在前面 学习二叉树结构,最简单的方式就是遍历.所谓二叉树遍历,就是按照某种特定的规则,一次对二叉树中的节点进行相应的操作,并且每个节点只操作一次. 访问节点所做的操作要看具体的应用问题.遍历是二叉树 ...

最新文章

  1. 【组队学习】十月组队学习内容详情!(第30期)
  2. python【接上篇】
  3. 27 个问题,告诉你Python为什么这么设计
  4. 阿里《Java开发手册》中的 1 个bug!
  5. Java冒泡实现类Collections.sort()
  6. JEECG 喜讯[后续推出功能]
  7. px4代码解析(3)
  8. 后端开发工具:反编译工具、VS插件、.NET Framework源码地址
  9. Windows xp下IDT Hook和GDT的学习
  10. Jetbrain系列IDE设置
  11. 项目管理—成本效益分析
  12. iOS动态库和静态库的运用
  13. Unrecognized Windows Sockets error: 10106: create解决方案
  14. 视频教程-用友U8视频教程全集(合同管理)-ERP
  15. js切换图片会闪动_js 特效 当鼠标经过的时候 图片闪一下光
  16. rtthread + STM32F407VE + esp8266 +SD卡 从网络下载文件存到SD卡中
  17. 抖音seo是怎么做的?抖音seo排名规则,操作流程
  18. 可拖动菜单 【总结】
  19. comsol光学仿真01
  20. c语言10 u0010求余怎么求,矩阵LU分解求逆详细分析与C语言实现.docx

热门文章

  1. VMware中linux环境下oracle安装图文教程(一)
  2. 「有趣」基因组上除了ATCGN还能有什么字符
  3. 数据结构与算法python语言实现-第四章答案
  4. 好久不见——洗尽铅华后的释然放手
  5. 【JavaWeb - 网页编程】一 HTML技术与CSS技术
  6. 分数求和的三种方法(1/1-1/2+1/3-1/4+1/5+...+1/n)
  7. C语言扫雷函数成绩,C语言实现扫雷
  8. 个人对宏观经济学的理解
  9. 天地超云高温一体机的耐热秘诀
  10. LTE入门, 从这本书开始