第六章:树

一、二叉树

思路分析

节点提供具体实现方法,树实现接口调用

二、查找指定节点

思路分析

三、二叉树删除节点

课后作业:

代码实现

package Tree.BinaryTree;public class Demo01 {public static void main(String[] args) {//创建一棵二叉树BinaryTree binaryTree = new BinaryTree();//创建需要的节点HeroNode root = new HeroNode(1, "宋江");HeroNode n2 = new HeroNode(2, "吴用");HeroNode n3 = new HeroNode(3, "卢俊义");HeroNode n4 = new HeroNode(4, "林冲");HeroNode n5 = new HeroNode(5, "nana");//先手动创建二叉树root.left = n2;root.right = n3;n3.right = n4;n3.left = n5;binaryTree.setRoot(root);binaryTree.preOrder();binaryTree.infixOrder();binaryTree.postOrder();System.out.println(binaryTree);System.out.println("===================");System.out.println(binaryTree.preOrderSearch(3));System.out.println(binaryTree.infixOrderSearch(5));System.out.println(binaryTree.postOrderSearch(7));System.out.println("====================");binaryTree.del(3);binaryTree.preOrder();}
}//定义一个树
class BinaryTree {private HeroNode root;public void setRoot(HeroNode root) {this.root = root;}//前序遍历public void preOrder() {if (root != null) {this.root.preOrder();} else {System.out.println("当前二叉树为空,无法遍历");}}//中序遍历public void infixOrder() {if (root != null) {this.root.infixOrder();} else {System.out.println("当前二叉树为空,无法遍历");}}//后序遍历public void postOrder() {if (root != null) {this.root.postOrder();} else {System.out.println("当前二叉树为空,无法遍历");}}//前序查找public HeroNode preOrderSearch(int no) {if (root != null) {HeroNode res = this.root.preOrderSearch(no);if (res.no == no) {return res;}return null;} else {return null;}}//中序查找public HeroNode infixOrderSearch(int no) {if (root != null) {HeroNode res = this.root.infixOrderSearch(no);if (res.no == no) {return res;}return null;} else {return null;}}//后序查找public HeroNode postOrderSearch(int no) {if (root != null) {HeroNode res = this.root.postOrderSearch(no);if (res.no == no) {return res;}return null;} else {return null;}}//删除public void del(int no) {if (root != null) {if (root.no == no) {root = null;} else {this.root.del(no);}} else {System.out.println("二叉树为空,无法继续删除");}}
}//先创建HeroNode节点
class HeroNode {public int no;public String name;public HeroNode left;public HeroNode right;public HeroNode() {}public HeroNode(int no, String name) {this.no = no;this.name = name;}@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +'}';}//前序遍历的方法public void preOrder() {System.out.println(this);//先输出当前节点(初始化时是根节点)if (this.left != null) {//向左递归前序遍历this.left.preOrder();}if (this.right != null) {//向右递归前序遍历this.right.preOrder();}}//中序遍历的方法public void infixOrder() {if (this.left != null) {this.left.infixOrder();}System.out.println(this);if (this.right != null) {this.right.infixOrder();}}//后序遍历的方法public void postOrder() {if (this.left != null) {this.left.postOrder();}if (this.right != null) {this.right.postOrder();}System.out.println(this);}//前序查找public HeroNode preOrderSearch(int no) {//先判断父节点if (this.no == no) {return this;} else {HeroNode resNode = null;if (this.left != null) {//递归前序查找resNode = this.left.preOrderSearch(no);}if (resNode != null) {//说明左子树找到return resNode;}if (this.right != null) {resNode = this.right.preOrderSearch(no);}return resNode;//为空说明都没找到,不为空说明在右子树找到,最后的判断放在上层做}}//中序查找public HeroNode infixOrderSearch(int no) {HeroNode resNode = null;if (this.left != null) {//递归前序查找resNode = this.left.infixOrderSearch(no);}if (resNode != null) {//说明左子树找到return resNode;}if (this.no == no) {return this;}if (this.right != null) {resNode = this.right.infixOrderSearch(no);}return resNode;}//后序查找public HeroNode postOrderSearch(int no) {HeroNode 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;}return this;}//删除public void del(int no) {if (this.left != null && this.left.no == no) {if (this.left.left!=null){this.left = this.left.left;} else if (this.left.right!=null){this.left = this.left.right;} else {this.left=null;}return;}if (this.right != null && this.right.no == no) {if (this.right.left!=null){this.right = this.right.left;} else if (this.right.right!=null){this.right = this.right.right;} else {this.right=null;}return;}if (this.left != null) {this.left.del(no);}if (this.right != null) {this.right.del(no);}}
}

高龄白菜java学习第九十二、三天(java数据结构和算法(13))相关推荐

  1. Java学习笔记(二一)——Java 泛型

    [前面的话] 最近脸好干,掉皮,需要买点化妆品了. Java泛型好好学习一下. [定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个 ...

  2. Java学习笔记(二):Java程序基础

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://mp.csdn.net/mdeditor/100619398 目录 ...

  3. JavaScript学习(九十二)—关联数组的基本操作

    JavaScript学习(九十二)-关联数组的基本操作 王同学的每天进步一点点系列!!! 一.关联数组的定义 定义:所谓关联数组,就是指数组元素的下标为字符型 二.关联数组的创建方式 1)定义一个空数 ...

  4. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  5. java学习笔记(二十八)——开发一个小项目(VMeeting3.0)

    上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多:挂上一篇文章java学习笔记(二十七)--开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN ...

  6. Java入门123:一个老鸟的Java学习心得(二维码版)

    Java入门123:一个老鸟的Java学习心得(二维码版)清华大学出版社 Java入门123--一个老鸟的Java学习心得(二维码版)充分考虑了初学Java的种种困难,讲解细致入微,抽丝剥茧,层层推进 ...

  7. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  8. 视频教程-Java学习指南(Swing高级篇)-Java

    Java学习指南(Swing高级篇) 邵发,清华大学毕业,从业软件开发十余年,自2015年起致力于C/C++/Java等基础教育领域,希望能通过提高每一个个体的素质来推动中国IT业的整体发展.代表作: ...

  9. Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释...

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在曾经的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本的语法 ...

  10. Java学习笔记(二)

    1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Runtime Enviro ...

最新文章

  1. 自然辩证法的当代价值
  2. 【Spring框架家族】Spring Cloud Eureka 之常用配置解析(转载)
  3. 2.2.1 mini-batch
  4. SCSS SASS Color 颜色函数用法
  5. 计算机考研考编程,计算机考研面试------编程语言
  6. 软件工程---16.基于构件的软件工程
  7. “删库跑路”这件事情真的发生了 ,还是技术总监干的!
  8. Android Studio下JUnit单元测试
  9. 用傅里叶分析得到频域信息 MATLAB,信号分析实验_傅里叶matlab实现.doc
  10. 使用phaserjs开发简单h5小游戏
  11. 经典数据结构视频教程下载 (清华大学 严蔚敏)
  12. 看Spring实战有感(一)
  13. 石头机器人拖地水量调节_拖地组件再评测:正式版 家有 石头科技T4 米家一代 水箱拖地组件...
  14. 中国IP对讲产品市场深度研究分析报告
  15. 二元隐函数求二阶偏导_隐函数求二阶偏导
  16. ecshop mysql密码忘记_ECSHOP后台密码忘记了怎么办
  17. python selenium 获取网页源代码
  18. AdaBoost原理说明
  19. python 获取当前日期和时间_python获取当前日期和时间的方法
  20. 在word的文字右上角添加符号(插入上标)?

热门文章

  1. 1553C - Penalty
  2. HCL IRF BFD配置
  3. Windows To Go屏蔽本机硬盘教程
  4. kolin协程讲解不错的几篇博客
  5. 实训十:三层交换机实现二层交换机VLAN间通信
  6. 抓log的各种方法和命令
  7. 在Linux使用脚本实现TC控制少数人的下载带宽,如果是网管,正好用得着。
  8. 计算机安全技术众包过滤器,空间众包中的安全任务分配研究
  9. 简要说明第三方收款码,固定收款码、收款二维码的未来发展
  10. 树莓派3 搭建bt下载机---利用 aria2