java实现二叉树的三种遍历(前序、中序、后序)

手把手教你用LcmSim+TakeDotLib打造完美LCD显示效果(附12x12汉字配置模板) 本文详细介绍了如何使用LcmSim模拟器与TakeDotLib标准字库工具优化LCD显示效果,包括字体选择、字库生成和实体设备验证。通过12x12汉字与8x16 ASCII的黄金比例配置,帮助开发者解决嵌入式开发中的显示难题,提升用户体验。附赠12x12汉字配置模板,可直接用于项目。 阅读详情

话不多说直接上代码,一切尽在代码中:

public class BinTree {
    private Node root;
    private List<Node> list=new ArrayList<Node>();
    public BinTree(){
        Node x=new Node("X",null,null);
        Node y=new Node("Y",null,null);
        Node d=new Node("d",x,y);
        Node e=new Node("e",null,null);
        Node f=new Node("f",null,null);
        Node c=new Node("c",e,f);
        Node b=new Node("b",d,null);
        Node a=new Node("a",b,c);
        root =a;//一定要将树根进行赋值
    }

    //定义节点类:
    private class Node{
      private String data;
      private Node lchid;//定义指向左子树的指针
      private Node rchild;//定义指向右子树的指针
      public Node(String data,Node lchild,Node rchild){
          this.data=data;
          this.lchid=lchild;
          this.rchild=rchild;
      }
    }
    //前序遍历
    public void preOrder(Node node)
    {

           list.add(node); //先将根节点存入list
           //如果左子树不为空继续往左找,在递归调用方法的时候一直会将子树的根存入list,这就做到了先遍历根节点
           if(node.lchid != null)
           {
               preOrder(node.lchid);
           }
           //无论走到哪一层,只要当前节点左子树为空,那么就可以在右子树上遍历,保证了根左右的遍历顺序
           if(node.rchild != null)
           {
               preOrder(node.rchild);
           }
    }

    /**
     * 对该二叉树进行中序遍历 结果存储到list中
     */
    public void inOrder(Node node)
    {
       if(node.lchid!=null){
           inOrder(node.lchid);
       }
       list.add(node);
       if(node.rchild!=null){
           inOrder(node.rchild);
       }
    }

    /**
     * 对该二叉树进行后序遍历 结果存储到list中
     */
    public void postOrder(Node node)
    {
        if(node.lchid!=null){
            postOrder(node.lchid);
        }
        if(node.rchild!=null){
            postOrder(node.rchild);
        }
        list.add(node);

    }
    /**
     * 返回当前数的深度
     *  说明:
     *  1、如果一棵树只有一个结点,它的深度为1。
     *  2、如果根结点只有左子树而没有右子树,那么树的深度是其左子树的深度加1;
     *  3、如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1;
     *  4、如果既有右子树又有左子树,那该树的深度就是其左、右子树深度的较大值再加1。
     *  
     * @return
     */
    public int getTreeDepth(Node node) {

           if(node.lchid == null && node.rchild == null)
           {
               return 1;
           }
           int left=0,right = 0;
           if(node.lchid!=null)
           {
               left = getTreeDepth(node.lchid);
           }
           if(node.rchild!=null)
           {
               right = getTreeDepth(node.rchild);
           }
           return left>right?left+1:right+1;
       }
  //得到遍历结果
    public List<Node> getResult()
    {
        return list;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BinTree tree=new BinTree();
        System.out.println("根节点是:"+tree.root.data);
        tree.preOrder(tree.root);
        //tree.postOrder(tree.root);
        for(Node node:tree.getResult()){
            System.out.println(node.data);
        }
    }

}

前序遍历的结果是:这里写图片描述

【WRF-Urban】使用 LCZ 替换 WRF 运行中的 LUCC 数据 使用 LCZ 替换 WRF 运行中的 LUCC 数据 阅读详情

相关推荐

Android - 蓝牙开发

文章目录科普SIG类型制式编程Classic BluetoothBluetooth Low Energy蓝牙的UUID是什么?有什么用? 科普 https://zh.wikipedia.org/wiki/%E8%97%8D%E7%89%99 蓝牙(英语:Bluetooth),一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由 2.4 至 2.485 GHz 的 ISM(工业、科学、医疗)频段来进行通信。1994 年由电信商

qq_43323826的博客 1万+

【编程题】二叉树的前序遍历(Java实现)

【编程题】二叉树的前序遍历(Java实现) 题目来源 leetcode第144题 https://leetcode-cn.com/problems/binary-tree-preorder-traversal/ 题目描述 给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解...

qq_40432108的博客 4118

电磁仿真新手必看:如何用CST Studio Suite 2023完成第一个PCB辐射仿真?

本文详细解析了如何使用CST Studio Suite 2023进行PCB辐射仿真,适合电磁仿真新手快速上手。从工程准备、求解器配置到端口设置和后处理技巧,全面覆盖三维全波电磁场仿真软件的核心操作步骤,帮助工程师精准预测和解决PCB电磁辐射问题。

y7z8a9的博客 734

二叉树遍历方法——前、中、后序遍历(java)

前序遍历是一种访问二叉树的每一个结点的方法,它的遍历顺序是根节点,左子树,右子树。

loss_rose777的博客 5万+

LLM评测框架Ragas:测试RAG的性能出现TimeoutError()的解决办法(Ragas+langchain+ollama)

无奈之下,自己找到了一个解决办法,在ragas支持的llm类库中加了一个如下的类,支持ollama、langchian_ollama使用ragas测试报错的问题。可以将如上的库放到你的ragas的系统库的llms目录下,然后修改__init__.py如下。最近用ragas测试rag的性能,发现老出现TimeoutError()的错误。这是一个临时的解决办法,具体等待官方给出最终的解决方案。后来发现官方也没有尽快支持的计划。然后就可以用如下代码进行一些验证。

Criss@陈磊 666

阅文集团大数据面试题及参考答案

在 Flink 中,watermark 是一种用于处理乱序事件时间的机制。实现接口:通常需要实现 AssignerWithPeriodicWatermarks 或 AssignerWithPunctuatedWatermarks 接口。前者会周期性地生成 watermark,后者则是基于某些特定事件来生成 watermark ,比如接收到某个特定值的消息时。定义位置:可以在数据源处或者在流处理的中间操作中定义 watermark。在数据源定义时,能更精准地根据数据的产生特性设置 watermark;

大模型大数据攻城狮的专栏 1090

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

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

wang20010104的博客 1843

DCM07-诊断服务EcuReset ($11 )的配置和实现

文章目录1 诊断服务EcuReset ($11 )1.1 概述1.2 诊断模式声明组1.3 代码实现1.4 配置参数 传送门 ==>> AutoSAR实战系列300讲「糖果Autosar」总目录 1 诊断服务EcuReset ($11 ) 1.1 概述 该服务实现了 ECU 内的复位功能,协议的具体理论讲解请参考「FlashBootloader03【电控单元复位服务($11)】」。在接收到UDS 服务 0x11 的请求时,DCM 模块应触发 ModeDeclarationGroupPrototy

2066

Java中二叉树的前序遍历、中序遍历及后续遍历代码

公共类——节点类代码: // Definition for a binary tree node. public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) {

Erudite_x的博客 984

Python全栈入门到实战【进阶篇 1】类与对象:面向对象编程的基石

Python中定义类使用**class关键字**,创建对象使用**类名()**(类似调用函数),语法简洁,我们从最基础的空类开始,逐步拆解。class# 定义空的学生类,pass表示占位,无实际内容 class Student : pass编码规范:类名遵循大驼峰命名法(每个单词首字母大写,无下划线),如StudentCarPhone,这是Python官方推荐的PEP8规范,便于区分类和其他标识符。实例方法必须定义在类内部;实例方法的第一个参数必须是self(名称可自定义,如this。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3409

【ROS】ROS2导航Nav2:简介、安装、测试效果、错误处理

在ROS2中自动导航使用Nav2来实现。Nav2 使用几个独立的模块化服务,通过 ROS 2接口(例如动作服务器或服务)与行为树 (BT) 通信。Nav2 输入包括:TF转换、一个地图源、一个行为树 (BT) XML 文件和相关的传感器数据源;Nav2 输出速度命令;Nav2 支持多种机器人,比如:四足机器人、履带机器人、轮式机器人等。

郭老二 5092

java实现二叉树常见遍历算法

最近在复习二叉树遍历相关方面的知识,查看书籍以及在网上搜集了一些资料,我把它整理出来,放在这里,供自己以后再看,也供大家参考参考!二叉树遍历方法 1.前序遍历(先根遍历)————访问根节点的操作发生在遍历其左右子树之前。 2.中序遍历(中根遍历)————访问根节点的操作发生在遍历其左右子树之中。 3.后序遍历(后根遍历)————访问根节点的操作发生在遍历其左右子树之后。 1.二叉树先序非递归遍历

MyName_kk的博客 2348

基于simulink构建一个完整的航空航天器姿态控制与导航仿真模型

航空航天器的姿态控制与导航系统是确保飞行器稳定运行和精确执行任务的核心技术。其目标是通过传感器获取飞行器的状态信息,并利用控制器调整飞行器的姿态,使其按照预定轨迹飞行。基于MATLAB/Simulink平台进行航空航天器姿态控制与导航系统的建模与仿真,可以帮助研究者验证算法性能并优化系统的动态响应。本项目旨在构建一个完整的航空航天器姿态控制与导航仿真模型,包括飞行器动力学建模、传感器模块设计、控制器实现以及导航算法仿真,并通过仿真分析其性能。

xiaoheshang_123的博客 273

二叉树的前序、中序、后序三种遍历方式(Java实现)

文章目录定义定义Node节点和树前序遍历代码实现递归非递归,使用栈中序遍历代码实现递归非递归,同样用栈后序遍历代码实现递归非递归 定义 首先我们要知道前序遍历、中序遍历、后序遍历三种遍历方式的定义 前序遍历是根->左->右 中序遍历是左->根->右 后序遍历是左->右->根 根据定义,我们很容易发现规律,前中后分别指的是根的访问顺序,比如前序,就是根在最前面...

qq_34912889的博客 722

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java实现二叉树-前序,中序,后序三种遍历(递归+非递归)

一,前序 二,中序 三,后序

淡沫初夏zz的博客 3889

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

一看就会,二叉树的创建和三种遍历--前序、中序、后序(附java代码实现)

转载自原文 文章目录一、易懂的形象理解1、前序遍历2、中序遍历3、后序遍历4、层序遍历二、真正理解三种遍历三、代码实现 一、易懂的形象理解 其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~ 先用我想的一种简单易懂的形象思维理解一下前序、中序、后序 +层序! 1、前序遍历 先序遍历可以想象成,小人从树根开始绕着整棵树的外...

scoful的专栏 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java实现对二叉树的前序、中序、后序三种遍历(迭代和递归)

1、前序遍历 /** * @Description: * 前序遍历 * 口诀:根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。 * 在遍历左、右子树时,仍然先访问根节点,然后遍历左子树,最后遍历右子树。 * 若二叉树为空则结束返回,否则: * (1)访问根结点。 * (2)前序遍历左子树。 * (3)前序遍历右子树 。 * 需要注意的是:遍历左右子树时仍然采用前序遍历方法。 * 注意:已知后序遍历和中序遍历,就能确定前序遍历。 * @Author: chong * @D

weixin_42050795的博客 333

java 二叉树最大深度 和 (前序、中序、后序)三种遍历实现

public class TreeNodeTest { TreeNodeTest left; TreeNodeTest right; int val; TreeNodeTest(int v){ this.val = v; } public static void main(String[] args) { TreeNodeTest root = new TreeNode...

mingxiuping1988的专栏 316

快速学会二叉树的前序、中序、后序遍历

快速学会并掌握二叉树的前序、中序、后序遍历

jjruanlili的博客 2336

二叉树的前序、中序、后序遍历(附java代码)

前序遍历的顺序是根左右,中序遍历的顺序是左根右,后序遍历的顺序是左右根;前序、中序、后序遍历就是看访问根节点的位置。

小白的出道之路 5100

【java】【二叉树】【前序、中序、后序遍历】

/** * 二叉树前序、中序、后序遍历 * 所谓前、中、后序遍历, 区别主旨关注在根节点的输出时机 * 前序:最早 * 中序:其次 * 后序:最晚 * */ class BinaryTree1{ private HeroNode1 node; public void preOrder() { if( node != null ) { this.node.preOrder(); }else{ System.out.println( "二叉树为空,无法遍历" ); } } .

zhao123sun的博客 292

通过中序遍历和后序遍历来得到二叉树的前序遍历

样例输入: 6 3 2 4 1 6 5 3 4 2 6 5 1 样例输出: 1 2 3 4 5 6 import javax.swing.tree.TreeNode; import java.util.Scanner; /* 前序:根左右 中序:左根右 后序:左右根 */ public class Main{ public static void main(S...

qq_44985985的博客 300

二叉树的前序遍历、中序遍历和后序遍历

记住口诀: 前序(根左右)、中序(左根右)、后序(左右根) 可以看到,说的前中后序其实指的是根在遍历时的位置 示例: 前序遍历:A–>B–>D–>F–>G–>H–>I–>E–>C 中序遍历:F->D–>H–>G–>I–>B–>E–>A–>C 后序遍历:F–>H–>I–>G–>D–>E–>B–>C–>A Java编程实现: 144. 二叉树的前序遍历 难度:简单 题

LIsaWinLee的博客 2693

java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)

前言 java关于ACM的代码真的好少,想参考如何用java实现二叉树google了一上午都没找到资料,只能自己仿照之前写的c代码,实现一遍,供大家吐槽参考 题目 根据二叉树前序遍历序列例如:7,-7,8,#,#,-3,6,#,9,#,#,#,-5,#,#,构建二叉树,并且用前序、中序、后序进行遍历 代码 import java.util.Scanner; public

小一的专栏 4874

二叉树--前序、中序、后序查询指定的节点

前序查找: 思路分析: 先判断当前结点的no是否等于查找的,如果是相等,则返回当前结点。 如果不等,则判断当前结点的左子结点是否为空,如果不为空,则递归前序查找。 左递归前序查找,找到结点则返回否则继续判断,当前结点的右子结点是否为空,如果不空,则继续向右递归前序查找。 //定义一个二叉树 public class binaryTreeDemo { public static void main(String[] args) { //先创建一个二叉树 BinaryTree binaryTree

果车的博客 337

二叉树三种非递归遍历以及代码实现

二叉树三种非递归遍历 1.二叉树前序非递归遍历实现,(采用栈) 思路:(用一个栈) 1.首先用cur标记树的根(root),当cur非空的时候; 2.就直接打印根,并且将cur(也就是root)入栈; 3.接着遍历根的左子树,一直遍历到最左边; 4.当循环出来后,最左边的节点就已经入栈了; 5.然后将队列此时非空(这就是最外面循环的一个条件),就弹出队头元素,并且用cur标记弹出元素的右节点; 6.所以如果右节点非空的时候还要将右边节点打印并且入栈,所以最外面还要增加一个条件,让右节点也被打印,就是cur

元宝的博客 589
上一篇: java中的动态代理机制
下一篇: 数据结构中几种排序的java实现
鹤野云间
博客等级 码龄9年 4粉丝 27原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值