二叉树模板类:

class BinaryTree {private Node root;public void setRoot(Node root) {this.root = root;}//删除结点public void delNode(int no) {}//前序遍历public void preOrder() {}//中序遍历public void infixOrder() {}//后序遍历public void postOrder() {}//前序遍历public HeroNode preOrderSearch(int no) {}//中序遍历public HeroNode infixOrderSearch(int no) {}//后序遍历public HeroNode postOrderSearch(int no) {}
}

树节点模板类:

class HeroNode {private int no;private String name;private HeroNode left; //默认nullprivate HeroNode right; //默认null

1.遍历

树的遍历分为:
广度优先遍历:一层一层从左到右进行遍历(借助队列)
深度优先遍历:①先序遍历、每个结点的遍历都满足根结点、左结点、右结点(均借助栈)②中序遍历、每个结点的遍历都满足左结点、根结点、右结点③后序遍历、每个结点的遍历都满足左结点、右结点、根结点

  • 前序遍历:先输出父节点,再遍历左子树和右子树
public void preOrder() {if(this.root != null) {this.root.preOrder();}else {System.out.println("二叉树为空,无法遍历");}}
  • 中序遍历:先遍历左子树,再输出父节点,再遍历右子树
public void infixOrder() {if(this.root != null) {this.root.infixOrder();}else {System.out.println("二叉树为空,无法遍历");}}
  • 后序遍历:先输出左子树,再遍历右子树 ,最后输出父节点
public void postOrder() {if(this.root != null) {this.root.postOrder();}else {System.out.println("二叉树为空,无法遍历");}}

2.查找

  • 前序查找
public Node preOrderSearch(int no) {System.out.println("进入前序遍历");//比较当前结点是不是if(this.no == no) {return this;}//1.则判断当前结点的左子节点是否为空,如果不为空,则递归前序查找//2.如果左递归前序查找,找到结点,则返回Node resNode = null;if(this.left != null) {resNode = this.left.preOrderSearch(no);}if(resNode != null) {//说明我们左子树找到return resNode;}//1.左递归前序查找,找到结点,则返回,否继续判断,//2.当前的结点的右子节点是否为空,如果不空,则继续向右递归前序查找if(this.right != null) {resNode = this.right.preOrderSearch(no);}return resNode;}
  • 中序查找
public Node infixOrderSearch(int no) {//判断当前结点的左子节点是否为空,如果不为空,则递归中序查找Node resNode = null;if(this.left != null) {resNode = this.left.infixOrderSearch(no);}if(resNode != null) {return resNode;}System.out.println("进入中序查找");//如果找到,则返回,如果没有找到,就和当前结点比较,如果是则返回当前结点if(this.no == no) {return this;}//否则继续进行右递归的中序查找if(this.right != null) {resNode = this.right.infixOrderSearch(no);}return resNode;}
  • 后序查找
public Node postOrderSearch(int no) {//判断当前结点的左子节点是否为空,如果不为空,则递归后序查找Node resNode = null;if(this.left != null) {resNode = this.left.postOrderSearch(no);}if(resNode != null) {//说明在左子树找到return resNode;}//如果左子树没有找到,则向右子树递归进行后序遍历查找if(this.right != null) {resNode = this.right.postOrderSearch(no);}if(resNode != null) {return resNode;}System.out.println("进入后序查找");//如果左右子树都没有找到,就比较当前结点是不是if(this.no == no) {return this;}return resNode;}

3. 删除节点(基于无序的二叉树)

//递归删除结点//1.如果删除的节点是叶子节点,则删除该节点//2.如果删除的节点是非叶子节点,则删除该子树public void delNode(int no) {//思路/**    1. 因为我们的二叉树是单向的,所以我们是判断当前结点的子结点是否需要删除结点,而不能去判断当前这个结点是不是需要删除结点.2. 如果当前结点的左子结点不为空,并且左子结点 就是要删除结点,就将this.left = null; 并且就返回(结束递归删除)3. 如果当前结点的右子结点不为空,并且右子结点 就是要删除结点,就将this.right= null ;并且就返回(结束递归删除)4. 如果第2和第3步没有删除结点,那么我们就需要向左子树进行递归删除5.  如果第4步也没有删除结点,则应当向右子树进行递归删除.*///2. 如果当前结点的左子结点不为空,并且左子结点 就是要删除结点,就将this.left = null; 并且就返回(结束递归删除)if(this.left != null && this.left.no == no) {this.left = null;return;}//3.如果当前结点的右子结点不为空,并且右子结点 就是要删除结点,就将this.right= null ;并且就返回(结束递归删除)if(this.right != null && this.right.no == no) {this.right = null;return;}//4.我们就需要向左子树进行递归删除if(this.left != null) {this.left.delNode(no);}//5.则应当向右子树进行递归删除if(this.right != null) {this.right.delNode(no);}}

树节点的遍历,查找,删除(前序,中序,后序)相关推荐

  1. 二叉树遍历方法——前、中、后序遍历(图解)

    目录 一.前序遍历 (1)递归版本 (2)非递归版本 二.中序遍历 (1)递归版本 (2)非递归版本 三.后序遍历 (1)递归版本 (2)非递归版本 四.总结 五.测试程序 六.程序输出 二叉树的遍历 ...

  2. Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)

    目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...

  3. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  4. 数据结构 - 二叉树(前序中序后序查找)

    public static int i = 1, j = 1, k =1;//编写前序查找方法public HeroNode preOrderSearch(int no){System.out.pri ...

  5. 树的先序/中序/后序遍历

    树的结构如下: 先序(深度搜索遍历DFS):先顶点,再左边节点,接着右边节点 前序结果:ABDEHICFG 中序:先左边节点,再顶点,最后右边节点 中序结果:DBHEIAFCG 后序:先左边节点,然后 ...

  6. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

  7. 二叉树的前序中序后序遍历java代码实现

    1.前序遍历概述 前序遍历(VLR) 是二叉树遍历的一种,也叫做先根遍历.先序遍历.前序周游,可记做根左右.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1 ...

  8. C++用类实现二叉树的创建,前序中序后序遍历(附完整代码)

    C++用类实现二叉树的创建,前序中序后序遍历(附完整代码) 前序.中序.后序遍历 直接上代码 前序.中序.后序遍历 二叉树的遍历分为前序遍历,中序遍历和后序遍历三种遍历方法.前序遍历的顺序为" ...

  9. 二叉树的前序中序后序遍历

    二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...

最新文章

  1. easybcd安装Ubuntu
  2. golang go-restful RESTful框架 简介
  3. Windows不重启就使环境变量修改生效
  4. 算法分析与设计——蛮力法0/1背包
  5. 数据结构与算法 | 直接插入排序、希尔排序
  6. [python opencv 计算机视觉零基础到实战] 六、图像运算
  7. 2018.3.30 边框应用与导航栏设置
  8. 云服务器centos怎么还原系统还原,云服务器centos怎么还原系统还原
  9. 统计学习方法基础总结
  10. 出门问问发布企业级场景的智能交互屏TicKasa Show,适用于多种场景...
  11. SAP 各模块常用T-Code
  12. 【前端第七课】媒体查询的语法;移动端适配相关知识点;Grid高级布局
  13. PS-怎么用ps查看精灵图(雪碧图)的位置?
  14. 恒星物联-排水管网水质监测系统方案 管网水质监测
  15. 如何制定客户留存策略_APP开发提升用户留存的7条策略
  16. Py之Database:Python和数据库的那些嘻嘻哈哈事详细攻略
  17. ELK+Filebeat+Redis部署应用指导书(一)
  18. 2021年第一季开发者报告新鲜出炉,最流行的编程语言竟然是它!
  19. 响应式网站建设为何会成为网站行业新宠?
  20. 嵌入式教程:为什么Linux在嵌入式中如此重要?

热门文章

  1. Fiddler抓包2-只抓APP的请求
  2. Java开发知识之Java中的集合上List接口以及子类讲解.
  3. 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
  4. Java实现敏感词过滤 - IKAnalyzer中文分词工具
  5. [Java,MVC] Eclipse下搭建Spring MVC
  6. C#笔记(二):委托与事件
  7. openmp使用经验
  8. 有关ucosii中OSTCBY、OSTCBBitY、OSTCBX、OSTCBBitX的意义(我是菜鸟)
  9. 推荐CUDA程序优化的15个策略
  10. 【文章】论文写作知识积累