二叉树 遍历 查找指定节点
数据结构与方法:
public class MyBinaryTree<E> {//根节点private Node root;public void setRoot(Node root) {this.root = root;}//树的前序遍历public void preOrder() throws RuntimeException {if(this.root!=null){this.root.preOrder();}else {throw new RuntimeException("root node is null");}}//树的中序遍历public void infixOrder() throws RuntimeException {if(this.root!=null){this.root.infixOrder();}else {throw new RuntimeException("root node is null");}}//树的后序遍历public void postOrder() throws RuntimeException {if(this.root!=null){this.root.postOrder();}else {throw new RuntimeException("root node is null");}}//前序遍历查找public Node preOrderSearch(E e){if(root != null){return this.root.preOrderSearch(e);}else {return null;}}//中序遍历查找public Node infixOrderSearch(E e){if(root != null){return this.root.infixOrderSearch(e);}else {return null;}}//后序遍历查找public Node postOrderSearch(E e){if(root != null){return this.root.postOrderSearch(e);}else {return null;}}/*** 叶子节点结构 E为对象泛型* @param <E>*/public static class Node<E> {E item;Node<E> left;Node<E> right;public Node(E item) {this.item = item;}public Node(E item, Node<E> left, Node<E> right) {this.item = item;this.left = left;this.right = right;}public Node() {}public void setLeft(Node<E> left) {this.left = left;}public void setRight(Node<E> right) {this.right = right;}@Overridepublic String toString() {return "Node{" +"item=" + item +'}';}/*** 前序遍历节点*/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 Node preOrderSearch(E e){System.out.println("进入前序查找");//比较当前节点是不是if(this.item.equals(e)){return this;}Node node = null;//判断左子节点是否为空 进行查找if(this.left != null ){node = this.left.preOrderSearch(e);}//如果找到了 就赋值返回if(node != null){return node;}//判断右子节点是否为空 查找if(this.right != null){node = this.right.preOrderSearch(e);}return node;}//中序遍历查找public Node infixOrderSearch(E e){Node node = null;//判断左子节点是否为空 进行查找if(this.left != null ){node = this.left.infixOrderSearch(e);}//如果找到了 就赋值返回if(node != null){return node;}System.out.println("进入中序查找");//比较当前节点是不是if(this.item.equals(e)){return this;}//判断右子节点是否为空 查找if(this.right != null){node = this.right.infixOrderSearch(e);}return node;}//后序遍历查找public Node postOrderSearch(E e){Node node = null;//判断左子节点是否为空 进行查找if(this.left != null ){node = this.left.postOrderSearch(e);}//如果找到了 就赋值返回if(node != null){return node;}//判断右子节点是否为空 查找if(this.right != null){node = this.right.postOrderSearch(e);}//如果找到了 就赋值返回if(node != null){return node;}System.out.println("进入后序查找");//比较当前节点是不是if(this.item.equals(e)){node = this;}return node;}}
}
测试方法、数据:
//测试 根据值查找树节点@Testpublic void test02(){MyBinaryTree.Node node1 = new MyBinaryTree.Node<Integer>(1);MyBinaryTree.Node node2 = new MyBinaryTree.Node<Integer>(2);MyBinaryTree.Node node3 = new MyBinaryTree.Node<Integer>(3);MyBinaryTree.Node node4 = new MyBinaryTree.Node<Integer>(4);MyBinaryTree.Node node5 = new MyBinaryTree.Node<Integer>(5);node1.setLeft(node2);node1.setRight(node3);node3.setRight(node4);node3.setLeft(node5);MyBinaryTree tree = new MyBinaryTree();tree.setRoot(node1);
// MyBinaryTree.Node node = tree.preOrderSearch(5); //前序查找 查找4次
// MyBinaryTree.Node node = tree.infixOrderSearch(5); //中序查找 查找3次MyBinaryTree.Node node = tree.postOrderSearch(5); //前序查找 查找2次if(node!=null){System.out.println(node);}else{System.out.println("没有找到");}}
二叉树 遍历 查找指定节点相关推荐
- 二十六、二叉树--查找指定节点
一.通过前中后序遍历查找指定节点 请编写前序查找,中序查找和后序查找的方法. 并分别使用三种查找方式,查找 heroNO = 5 的节点 并分析各种查找方式,分别比较了多少次 思路分析图解 二.代码实 ...
- Java版二叉树的前序遍历查找、中序遍历查找和后序遍历查找
文章收藏的好句子:任何挫折,如果无法彻底击败你,那一定会使你更强. 目录 1.二叉树的节点查找 1.1 前序遍历查找 1.2 中序遍历查找 1.3 后序遍历查找 1.二叉树的节点查找 1.1 前序遍 ...
- C#中读取xml文件指定节点
假设xml文件内容是 <?xml version="1.0" encoding="utf-8"?> <Workflow> <A ...
- 查找树的指定层级_非递归层次遍历方法实现二叉树中指定节点的层次数查找
数据结构教材中,提供了基于队列实现一个二叉树的非递归层次遍历算法.但对于一个任意二叉树,如果要查找其中任何一个节点所在的层次数,教科书中并没有给出基于层次遍历的非递归算法.鉴于层次遍历算法比较容易理解 ...
- 求二叉树根节点到指定节点的路径
算法 求二叉树根节点到指定节点的路径 @author:Jingdai @date:2020.11.05 题目描述 给你一个棵二叉树,再给你一个指定的节点,求根节点到指定节点的路径. 如图,比如让你求到 ...
- 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 三种情况: 1).如果左边为空,右边不为空,则右边的第一个节点就为公共祖先 2).如果右边为空,左边不为空,则左边的第一个节点就为公共祖先 3) ...
- SWUST OJ 1051: 输出利用先序遍历创建的二叉树中的指定结点的子结点
先吐槽一下"孩子"居然是禁止使用的词汇?!我说"孩子节点都不行"嘛 题目描述 利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的儿子结点.约定二叉树结点数 ...
- SWUST OJ 1052: 输出利用先序遍历创建的二叉树中的指定结点的双亲结点
题目描述 利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的双亲结点.约定二叉树结点数据为单个大写英文字符.当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点.最 ...
- Java版二叉树遍历,查找,顺序化存储代码实现
前中后序遍历,查找 package Tree; /*** 二叉树前 中 后 遍历,查找* @author bai**/ public class BinaryTreeDemo {public stat ...
最新文章
- spi通讯不需要地线吗_抖音真的需要养号吗?不需要!千万别被割了韭菜
- 北大韦神透露现状:自己课讲得不太好,中期学生退课后就剩下5、6个人
- 第215天:Angular---指令
- redis下载+php,php+redis实现消息队列
- [大数据可视化]-saiku的源码包Bulid常见问题和jar包
- k6前级效果器怎么用_新手学习电吉他,效果器应选择单块还是综合?
- u8转完看不到菜单_web网页有错误,无法看到操作菜单-用友U8
- 飞鸽传书2007 一个自己开发的软件
- java第一次作业计科2班马浩加
- top10开源docker开发工具
- 多台web服务器之间共享session
- 国民经济行业代码与投入产出表IO2002年行业代码
- BUAA-2021春-数据结构-综合作业-文本摘要生成(Hash实现 + SIMD优化 终测最速)
- Linux九阴真经之大伏魔拳残卷4 nginx(模型,安装配置,模块)
- 最新Mybatis插入数据返回自增主键详细配置
- J9数字论:如何去在Web2和Web3的融合中获得自己的优势呢?
- ssi 指令 php,SSI使用详解(一)_php
- GNU Radio Stream Tags
- 第一代至第五代计算机分别是,计算机应用基础教案—计算机的分类与发展(中职教育)...
- 计算机等级考试一级B的要求,计算机等级考试一级B考试要求及注意事项二
热门文章
- echarts3.x,echarts5.x 的wordCloud兼容
- 复变函数及应用 第四章学习感受
- 【i.MX8 Linux】构建 i.MX8 Yocto Project 映像
- 中国区域经济统计年鉴(2000-2014)
- 【李宏毅机器学习2021】Task01 机器学习介绍
- 带你入门学习Rxjava--上手教程
- 三菱Q系列PLC编程TCP Socket套接字程序
- 集成电路(IC)设计完整流程详解及各个阶段工具简介
- final变量存在哪 java_使用Java中的final变量需要注意的地方。
- 烟花代码(包教包会)