使用递归自动创建二叉树及前中后序遍历的实现(Java日记十一)

用递归方式实现二叉树先序、中序、后序遍历 先序遍历:中、左、右 中序遍历:左、中、右 后序遍历:左、右、中 public class Node { public int value; public Node left; public Node right; public Node(int data) { this.value = data; 阅读详情

代码超简单,使用一个辅助数组存每个结点的名字,我比较懒就使用了循环自动生成了A到Y作为树的名字,利用数学关系锁定数组下标的位置来找到对应的名字,至于遍历用递归来写实在是太简单了,我都懒得解释了,看代码就能理解,所谓的前中后无非就是把输出语句换个位置。

代码如下:

public class BTDemo {
    public static void main(String[] args) {
        char[] arr=new char[30];
        int n=0;
        for (char i = 'A'; i < 'Z'; i++,n++) {
            arr[n]=i;
        }
        BTNode node=new BTNode(1,'A');
        creatTree(node,arr,1);
        preShowTree(node);
        System.out.println();
        midShowTree(node);
        System.out.println();
        postShowTree(node);
    }
    public static void creatTree(BTNode node,char[] arr,int id){
        if(id>12){
            return;
        }
        int new_id=2*id;
        BTNode node1=new BTNode(new_id,arr[new_id-1]);
        BTNode node2=new BTNode(new_id+1,arr[new_id]);
        node.left=node1;
        node.right=node2;
        creatTree(node1,arr,new_id);
        creatTree(node2,arr,new_id+1);
    }
    //写完代码你会发现所谓的前中后序遍历无非就是把输出位置换成前中后罢了
    public static void preShowTree(BTNode node){
        System.out.print(node.name);
        if(node.left!=null){
            preShowTree(node.left);
        }
        if(node.right!=null){
            preShowTree(node.right);
        }
    }
    public static void midShowTree(BTNode node){
        if(node.left!=null){
            midShowTree(node.left);
        }
        System.out.print(node.name);
        if(node.right!=null){
            midShowTree(node.right);
        }
    }
    public static void postShowTree(BTNode node){
        if(node.left!=null){
            postShowTree(node.left);
        }
        if(node.right!=null){
            postShowTree(node.right);
        }
        System.out.print(node.name);
    }
}
class BTNode{
    public int id;
    public char name;
    public BTNode left;
    public BTNode right;
    public BTNode(int id,char name){
        this.id=id;
        this.name=name;
    }
}

SpringBoot+Git+Jenkins+K8s容器化部署 SpringBoot+Git+Jenkins+K8s容器一套部署流程 阅读详情

相关推荐

宇树G1嵌入式软件架构及技术实现

该架构通过硬件加速(FPGA)+确定性调度(RTX5)的组合,在1ms控制周期内完成从传感器采集到43轴输出的全链路处理,相比波士顿动力系统缩短40%的着地稳定时间。,结合ARM Cortex-R5与FPGA的异构计算能力,实现43自由度1kHz实时控制。

m0_60674045的博客 4311

递归法构造二叉树,实现先序,中序,后序遍历

#include<stdio.h> #include<stdlib.h> typedef struct BiTNode //建立树 { char data; struct BiTNode *lchild,*rchild; }*BiTree; void xian(BiTree T) //二叉树的先序遍历 { if(T==NULL)return ; //当T为空则返回 else { printf("%c .

Justliketherain的博客 1050

ESP32S3新手避坑:用IDF5.0驱动GT911触摸屏,我踩过的三个雷都给你填平了

本文详细解析了在ESP32S3开发板上使用IDF5.0驱动GT911触摸屏时常见的三大问题:软重启失效、状态寄存器读取异常和初始化参数差异。通过逻辑分析和硬件调试工具,提供了针对性的解决方案和优化建议,帮助开发者高效完成触摸屏驱动开发。

weixin_42567497的博客 297

二叉树1:递归实现二叉树的先序、中序、后序遍历

先序,中序,后序遍历有什么区别? 1.序是什么? (一)、我们知道,二叉树每个结点最多有两个孩子,一个左孩子一个又孩子。 访问的时候,这个序就指的是: 父节点,左孩子,右孩子。他们三个的访问顺序。 (二)、再一个,访问左右子树的相对顺序是固定的,即无论先序,中序还是后序,对于左右子树都是 先访问左子树,再访问右子树。 不存在先访问右再访问左这一说。 (三)、有了(二)的约束以后,那其实先序、中序 、后序的访问顺序就很明显了,其实就是父节点相对于左右子树或左右孩子的访问顺序 先序遍历:访问中间结点,再访问左

qq_43591406的博客 2074

从DIY到实战:手把手教你搭建一个媲美吉时利2450的nA级电流源表(附原理图与避坑指南)

本文详细解析如何从零打造nA级精密电流源,涵盖核心设计原理、PCB布局技巧、热电偶效应应对及校准验证体系。通过低成本替代方案和优化设计,实现媲美商用源表的性能,特别适合硬件爱好者和独立开发者。文章还提供原理图与避坑指南,助你轻松搭建高精度电流源系统。

weixin_42656416的博客 292

【史诗级】详细阐述借助AI实现对Windows蓝屏原因进行精确定位的方法

在解决问题的过程中我决定把这一切都记录下来,并整理出一套通用的方法,方便快速精确定位引起蓝屏的真实原因。今天我的蓝屏代码是0x000000ef,而你或许是遇到另一个蓝屏代码,代码本身代表的含义不是这里的讨论重点,重要的是解决问题的底层逻辑。

sprlightning的博客 1万+

用递归方法对二叉树进行先序、中序和后序遍历

二叉树为: 1 2 3 4 5 6 7 程序如下: #include #define N 7 using namespace std; typedef struct node {

认知 行动 坚持 1万+

OpenMMLab实战指南:从环境搭建到首个检测模型运行

本文是一份详细的OpenMMLab实战指南,重点介绍了如何从零开始搭建环境并运行首个目标检测模型。内容涵盖Miniconda环境配置、PyTorch与CUDA版本匹配、使用MIM工具安装MMCV和MMDetection的核心步骤,并通过RTMDet-tiny模型演示了完整的推理流程,帮助开发者高效入门这一计算机视觉开源算法体系。

weixin_28678151的博客 157

使用递归方式进行二叉树的前中后序遍历

function.h #pragma once #include <stdio.h> #include <stdlib.h> typedef char ElemType; //树的链式存储结构--创建一个完全二叉树 //层次建树必须要用队列 typedef struct BiTiNode { ElemType data;//数据域 struct BiTiNode* lchild, * rchild;//左右孩子指针 }BiTiNode, *BiTree; //队列(用于辅助层

ziupan的博客 2175

Python读取Matlab v7.3数据

文章目录Matlab保存数据Python读取 v7.3 Mat Matlab保存数据 在matlab设置中,常规->MAT文件,选择MATLAB版本7.3或更高版本保存数据。 注意保存数据的文件名为 corre.mat,保存的数据数组为data; 后面python的读取中会用到这两个参数 Python读取 v7.3 Mat 先安装hdf5storage库,再使用以下代码,就可以读取到mat中的数据,注意 import hdf5storage import numpy as np dataDi

weixin_43121914的博客 1081

YOLOv5改进策略|实战应用案例|YOLOv5苹果成熟度检测 ,准确率提升4.6%

苹果作为世界四⼤⽔果之⼀,富含多种维⽣素和矿物质,⼀直深受世界各地消费者的喜爱。据联 合国粮⻝及农业组织统计,全球⽔果产量中,苹果位列第⼆位,仅次于葡萄(贾等⼈,2020 )。然⽽,⼤多数苹果果实都是⼿⼯采摘的,这样的⽣产⽅法效率很低。此外,随着⼈⼝⽼龄化 和农村劳动⼒⼤量涌⼊城市,⽔果种植⾏业的劳动⼒成本也相应上升。所有这些因素都显着影响 着⽔果产品的市场竞争⼒。因此,实时⾼效采收苹果等⽔果,降低采收成本势在必⾏。基于机器 视觉的⽔果采摘机器⼈可以利⽤其信息感知来识别和采摘⽔果。

斌擎科技 2209

【算法刷题日记之本手篇】二叉树的遍历(前中后层序)

本篇文章介绍来自牛客试题广场广场的两道题题解,分别为【二叉树的前中后序遍历】和【层序遍历】,展示语言java。

未见花闻的博客 953

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【LeetCode刷题日记】二叉树翻转:递归与迭代全解析

(欢迎来访)✨命运的结局尽可永在,不屈的挑战却不可须臾或缺!前言:我们今天学习的是二叉树的相关的算法题。摘要:本文介绍了翻转二叉树的两种主要方法:递归法和迭代法(BFS)。递归法采用前序/后序遍历,通过交换每个节点的左右子树实现翻转,时间复杂度O(n),空间复杂度O(h)。迭代法使用队列进行层序遍历,同样通过交换左右节点实现翻转,适合避免递归栈溢出。特别指出中序遍历的陷阱:若按常规写法会导致部分子树被翻转两次,需调整处理顺序。

任岁月风干理想再也找不回真的我 1045

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【LeetCode刷题日记】一篇文章彻底吃透二叉树递归遍历——从调用栈到三种遍历

递归算法的三要素与调用栈原理解析 摘要:本文系统讲解了递归算法的核心三要素:参数与返回值、终止条件和单层递归逻辑。通过调用栈的视角,揭示了递归执行时栈帧压栈/弹栈的全过程,包括前序、中序、后序遍历的差异本质。文章以二叉树遍历为例,详细演示了递归执行时栈帧的变化规律,并指出常见错误如栈溢出、空指针异常的产生原因。最后提供了LeetCode二叉树遍历的标准递归实现,帮助读者建立递归思维的系统方法论。理解递归的栈机制是掌握复杂递归问题的基础,本文为递归学习提供了清晰的框架和实操指导。

任岁月风干理想再也找不回真的我 919

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

二叉树的前中后序查找(Java日记十二)

思想:在遍历函数上加以修改,设置函数返回值,找到返回1(在原输出位置做相等判断),否则返回0,在递归函数下方做判断,如果返回值为1就让它继续返回1。 代码如下: package Tree; public class BTDemo { public static void main(String[] args) { char[] arr=new char[30]; int n=0; for (char i = 'A'; i < 'Z'; i

Error的博客 699

Java算法 二叉树的中序遍历、二叉树的最大深度

文章通过递归法和迭代法两种方法解决了二叉树的中序遍历,通过后序遍历和层序遍历两种方法解决了二叉树的最大深度的问题。

qq_51744939的博客 272

Java学习日记——实现二叉搜索树

import java.io.Serializable; import java.util.Arrays; import java.util.LinkedList; import java.util.concurrent.ConcurrentLinkedDeque; import sun.misc.Queue; /** * Java实现二叉树 * 要求实现的方法: * 泛型要求实现Comparable接口,可以比较两个对象的大小 * 判断二叉树是否为空; * 得到二叉树的节点数量 * 得到二叉树

sapere_aude的博客 231

赵二的刷题日记《020》前、中、后序遍历二叉树

/** * 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) { .

qq_20013333的博客 117

【LeetCode刷题日记】掌握二叉树遍历:栈实现的三种绝妙方法

本文介绍了使用栈实现二叉树三种遍历方式的迭代算法。前序遍历通过"根→右→左"的入栈顺序实现;中序遍历需要指针辅助,先一路向左压栈再处理节点;后序遍历采用"根→右→左"顺序处理后反转结果。三种方法对比:前序遍历访问与处理顺序一致,无需指针;中序遍历需要指针跟踪未处理节点;后序遍历通过反转前序变体实现。这些方法通过显式栈替代递归隐式栈,均能达到O(n)时间复杂度,是面试常考的二叉树遍历实现方案。

任岁月风干理想再也找不回真的我 844

力扣练习日记——二叉树的层序遍历

力扣练习日记二叉树的层序遍历深度遍历 二叉树的层序遍历 先放题目 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7] 3 / \ 9 20    / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-

ccloveslife 349

代码随想录算法日记day16 | 513.找树左下角的值、112. 路径总和、106.从中序与后序遍历序列构造二叉树

今日算法题个人总结

2303_77648069的博客 635

Java学习日记(21-30天,树与二叉树)

学习地址 目录:21.二叉树的深度遍历的递归实现 21.二叉树的深度遍历的递归实现 二叉树是一种重要的树形结构,二叉树特点是每个结点最多只能有两棵子树,且有左右之分。 一个二叉树的结点有数据域、左孩子域、右孩子域。 public My(char paraName) { value = paraName; leftChild = null; rightChild = null; } 手动建立一个二叉树: public static My manualConstructTree() { My resu

あの花 417

【LeetCode刷题日记】106.从遍历序列重建二叉树:手撕递归边界,彻底搞懂左闭右闭 vs 左闭右开

本文介绍了如何根据二叉树的中序和后序遍历序列重构二叉树。通过分析示例,文章指出仅靠后序遍历无法确定节点间的父子关系,必须结合中序遍历来精确定位。核心解法是:1)取后序最后一个元素作为根节点;2)在中序中找到根节点位置并分割左右子树;3)根据中序分割结果对应分割后序数组;4)递归处理左右子树。文章详细讲解了边界切割方法(推荐左闭右开),并提供了Java实现代码,强调要注意递归终止条件和边界值的正确处理。该方法利用哈希表优化查找效率,时间复杂度为O(n)。

任岁月风干理想再也找不回真的我 963

【LeetCode刷题日记】654.最大二叉树:递归算法详解

本文介绍了如何构建最大二叉树的算法。给定一个不重复的整数数组,通过递归方式构建二叉树:首先找到当前数组片段的最大值作为根节点,然后递归地在最大值左侧子数组构建左子树,在右侧子数组构建右子树。文章详细解析了递归构建过程,包括确定根节点、分割左右子数组、终止条件等关键步骤,并通过示例演示了构建过程。最后提供了Java实现代码,强调返回值在递归连接中的重要性。该算法采用前序遍历方式,时间复杂度为O(n^2),适用于构建具有特定结构的二叉树。

任岁月风干理想再也找不回真的我 3285

JAVA学习日记——二叉树

1.树形结构(了解) 1.1 树形概念 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 有一个特殊的节点,称为根节点,根节点没有前驱节点 除根节点外,其余节点被分成M(M > 0)个互不相交的集合T1、T2、…、Tm,其中每一个集合 Ti (1 <= i <= m) 又是一棵与树类似的子树。每棵子树的根节点有且只有一个前驱,可以有0个或多个后继 树是递归

qq_42986727的博客 391

Java算法 翻转二叉树

文章通过递归和层序遍历两种方式进行了翻转二叉树的操作。

qq_51744939的博客 518
上一篇: 插值查找公式推导
下一篇: 二叉树的前中后序查找(Java日记十二)
星空的你
博客等级 码龄5年 193粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值