二叉树简介

二叉树

二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。

请添加图片描述

二叉树的遍历

二叉树的遍历主要有三种方式:前序遍历、中序遍历和后序遍历。

  1. 前序遍历:访问根节点 --> 遍历左子树 --> 遍历右子树
  2. 中序遍历:遍历左子树 --> 访问根节点 --> 遍历右子树
  3. 后序遍历:遍历左子树 --> 遍历右子树 --> 访问根节点

二叉树的实现

初始化二叉树

我们首先定义一个数组 arr 来存储二叉树的节点。然后在构造函数中,我们检查数组是否为空,如果为空则抛出异常。

public class ArrayBinaryTree<E> {private  E[] arr;public ArrayBinaryTree(E[] arr){if(arr.length == 0)throw new IllegalArgumentException("数组不能为空");this.arr = arr;}
}

前序遍历

前序遍历的顺序是:访问根节点 --> 遍历左子树 --> 遍历右子树。下图展示了前序遍历的过程。

请添加图片描述

我们使用 preOrder 方法来实现前序遍历。该方法接受一个索引和一个结果列表作为参数,然后将遍历的结果添加到结果列表中。

public void preOrder(int index, List<E> result){result.add(arr[index]);if(2 * index + 1 < arr.length){preOrder(2 * index + 1,result);}if(2 * index + 2 < arr.length){preOrder(2 * index + 2,result);}
}

中序遍历

中序遍历的顺序是:遍历左子树 --> 访问根节点 --> 遍历右子树。下图展示了中序遍历的过程。

请添加图片描述

我们使用 infixOrder 方法来实现中序遍历。该方法接受一个索引和一个结果列表作为参数,然后将遍历的结果添加到结果列表中。

public void infixOrder(int index, List<E> result){if(2 * index + 1 < arr.length){infixOrder(2 * index + 1,result);}result.add(arr[index]);if(2 * index + 2 < arr.length){infixOrder(2 * index + 2,result);}
}

后序遍历

后序遍历的顺序是:遍历左子树 --> 遍历右子树 --> 访问根节点。下图展示了后序遍历的过程。

请添加图片描述

我们使用 postOrder 方法来实现后序遍历。该方法接受一个索引和一个结果列表作为参数,然后将遍历的结果添加到结果列表中。

public void postOrder(int index, List<E> result){if(2 * index + 1 < arr.length){postOrder(2 * index + 1,result);}if(2 * index + 2 < arr.length){postOrder(2 * index + 2,result);}result.add(arr[index]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三、MyBatis 多表映射

本章概要 多表映射概念对一映射对多映射多表映射总结 多表映射优化多表映射总结 3.1 多表映射概念 多表查询结果映射思路 开发中有很多** 多表查询**需求&#xff0c;这种情况如何让进行处理&#xff1f; MyBatis 思想是&#xff1a;数据库不可能永远是你所想或所需的那个样…

在AWS lambda函数中用python脚本访问DynamoDB

语法 dynamodb.Table(A).query(IndexNameOrder-index,KeyConditionExpressionKey(Order).eq(Order) 这段代码是用于在 DynamoDB 中对表进行查询操作的 Python 代码&#xff0c;主要使用了 query 方法。 dynamodb.Table(A)&#xff1a;首先从 DynamoDB 中选取表 A 进行操作。 .…

用LED数码管显示计数器T0的计数值

#include<reg51.h> //包含51单片机寄存器定义的头文件 sbit SP3^2 ; //将S位定义为P3.2引脚 unsigned char Tab[ ]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码表 unsigned char x; /************************************************************…

Arduino开发实例-手指心率传感器模块

手指心率传感器模块 文章目录 手指心率传感器模块1、手指心率传感器介绍2、硬件准备及接线3、代码实现1、手指心率传感器介绍 本次使用的心率传感器模块是为教育和娱乐目的而设计的,通过手指检测心血管脉搏波。 它使用 PPG (HRM-2511E) 探头进行数据传输。 该传感器使用红外线…

Mysql中设置只允许指定ip能连接访问(可视化工具的方式)

场景 Mysql中怎样设置指定ip远程访问连接&#xff1a; Mysql中怎样设置指定ip远程访问连接_navicat for mysql 设置只有某个ip可以远程链接-CSDN博客 前面设置root账户指定ip能连接访问是通过命令行的方式&#xff0c;如果通过可视化工具比如Navicat来实现。 注&#xff1a…

element里面的confirm弹窗,提示message换行

element里面的confirm弹窗&#xff0c;提示message换行 confirm弹窗的message换行 直接添加dangerouslyUseHTMLString属性即可 let str 我是第一行提示&#xff01;\n 第二行提示&#xff01;\n 第三行提示; // 处理str let mesg str.replace(/\n/g, <br />); thi…

router.afterEach()后置钩子用法

router.afterEach 是 Vue Router 提供的全局后置钩子&#xff0c;用于在路由切换之后执行一些逻辑。与 beforeEach 钩子不同&#xff0c;afterEach 不需要调用 next 函数&#xff0c;因为它是在导航已经确认的情况下执行的。 基本用法如下&#xff1a; router.afterEach((to,…

在java java.util.Date 已知逝去时间怎么求年月日

您可以使用java.util.Date对象的getYear()、getMonth()和getDate()方法来获取逝去时间的年、月和日。 示例代码如下&#xff1a; import java.util.Date;public class Main {public static void main(String[] args) {Date deceasedDate new Date(120, 8, 15); // 已知逝去时…

案例130:基于微信小程序的综合文化信息管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

七大排序(含快排+归并的递归版和非递归版)

文章目录 前言一、冒泡排序二、选择排序三、插入排序四、希尔排序五、堆排序六、快速排序快排的递归方式快排的非递归方式 七、归并排序自上而下的递归自下而上的迭代 总结 前言 排序&#xff1a; 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的…

代码随想录算法训练营第20天 | 654.最大二叉树 + 617.合并二叉树 + 700.二叉搜索树中的搜索 + 98.验证二叉搜索树

今日任务 654.最大二叉树 - Medium617.合并二叉树 - Easy700.二叉搜索树中的搜索 - Easy98.验证二叉搜索树 - Medium 654.最大二叉树 - Medium 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法…

windows下cmd 查看端口号kill进程

网上总是不准&#xff0c;还不如自己写&#xff0c;省时省力 查看所有进程占用的端口&#xff08;基本没用&#xff0c;谁没事看所有端口&#xff1f;&#xff09; netstat –ano看指定端口PID&#xff0c;最后一位数字&#xff0c;即PID netstat -ano|findstr 80按照PID ki…

数学建模-时间序列预测步骤

目录 数据 第一步&#xff1a;定义时间 第二步&#xff1a;创建传统模型 结果 论文下笔 GG 数据 第一步&#xff1a;定义时间 第二步&#xff1a;创建传统模型 点击条件&#xff0c;点击 离群值全部勾选 点击统计 点击图 保存 选项 结果 论文下笔 由于我们的数据中不存在…

Android Text View 去掉默认的padding的实现方法

先看下最终实现效果&#xff0c;满意您在往下看&#xff1a; TextView 绘制的时候自带一定的Padding值&#xff0c;要想实现去掉默认的padding值&#xff0c;xml文件可以设置一个属性值 &#xff1a; android:includeFontPadding"false" 然后运行起来就会发现&…

2023年全国职业院校技能大赛高职组应用软件系统开发正式赛题—模块三:系统部署测试

模块三&#xff1a;系统部署测试&#xff08;3 小时&#xff09; 一、模块考核点 模块时长&#xff1a;3 小时模块分值&#xff1a;20 分本模块重点考查参赛选手的系统部署、功能测试、Bug 排查修复及文档编写能力&#xff0c;具体包括&#xff1a;系统部署。将给定项目发布到…

MIT 6s081 lab10:mmap

Lab:mmap 给xv6添加mmap和munmap功能&#xff0c;将文件映射到进程的地址空间。 添加mmap和munmap的系统调用接口&#xff08;和前面的实验一样&#xff09; 在Makefile中添加$U/_mmaptest\ 在kernel/syscall.h中添加 #define SYS_mmap 22 #define SYS_munmap 23在kerne…

书生·浦语大模型--第三节课笔记--基于 InternLM 和 LangChain 搭建你的知识库

文章目录 大模型开发范式RAGLangChain框架&#xff1a;构建向量数据库构建检索问答链优化建议web 部署 实践部分 大模型开发范式 LLM的局限性&#xff1a;时效性&#xff08;最新知识&#xff09;、专业能力有限&#xff08;垂直领域&#xff09;、定制化成本高&#xff08;个…

Android 仿快手视频列表,RecyclerView与Banner联动效果

这是看到群里讨论过快手APP的一个观看他人视频列表的一个联动效果&#xff0c;但是并不是完全按照这个软件的效果来做的&#xff0c;只是参考&#xff0c;并不是完全仿照这个软件来做的&#xff0c;没时间去优化排版问题了&#xff0c;请见谅&#xff0c;如图&#xff1a; 实现…

try:创作助手-python制作一个购物网站。

本文使用创作助手。 包含了美观的页面设计、购物内容、购物车和支付界面的功能。请注意&#xff0c;这只是一个基本示例&#xff0c;您可以根据自己的需求进行修改和扩展。 index.html: <!DOCTYPE html> <html> <head><title>Shopping Website</…

如何分析测试任务及需求(附分析流程)

测试分析 确认测试范围 根据测试项目的不同需求&#xff0c;有大致几类测试项目类型&#xff1a;商户/平台功能测试、支付方式接入测试、架构调整类测试、后台优化测试、性能测试、基本功能自动化测试。 测试项目需要按照文档要求进行测试需求分析&#xff0c;并给出对应的输出…