【数据结构(九)】顺序存储二叉树(2)

文章目录

  • 1. 相关概念
  • 2. 顺序存储二叉树的遍历


1. 相关概念

    从数据存储来看,数组存储方式树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看右面的示意图。

在这里插入图片描述

转换原则:
    1.上图的二叉树的结点,要求以数组的方式来存放 arr:[1, 2, 3, 4, 5, 6, 6]
     2.要求在遍历数组arr 时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历。

顺序存储二叉树的特点:

在这里插入图片描述

① 顺序二叉树通常只考虑 完全二叉树
② 第 n n n 个元素的左子节点的,编号为 2 ∗ n + 1 2 * n + 1 2n+1,(如上图第2个节点(编号为1的节点)的左子节点的编号为2 * 1+1=3)
③ 第 n n n 个元素的右子节点的编号为 2 ∗ n + 2 2 * n + 2 2n+2 ,(如上图第2个节点(编号为1的节点)的右子节点的编号为2 * 1+2=4)
④ 第 n n n 个元素的父节点的编号为 ( n − 1 ) / 2 (n-1) / 2 (n1)/2,(如上图第2个节点(编号为1的节点)的父节点的编号为(1-1)/2=0)
   其中, n n n:表示二叉树中的第几个元素(按 0 开始编号,如上图所示)

2. 顺序存储二叉树的遍历

需求:
    给一个数组 {1,2,3,4,5,6,7},要求以二叉树前序遍历的方式进行遍历。 前序遍历的结果应当为1,2,4,5,3,6,7。

代码实现:

package tree;

public class ArrBinaryTreeDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = { 1, 2, 3, 4, 5, 6, 7 };
		// 创建一个ArrayBinaryTree
		ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
		arrBinaryTree.preOrder();//

	}

}

//编写一个ArrayBinaryTree,实现顺序存储二叉树遍历

class ArrBinaryTree {
	private int[] arr;// 存储数据节点的数组

	public ArrBinaryTree(int[] arr) {
		this.arr = arr;
	}

	// 重载preOrder
	public void preOrder() {
		this.preOrder(0);
	}

	// 编写一个方法,完成顺序存储二叉树的前序遍历
	/**
	 * 
	 * @param index 数组的下标
	 */
	public void preOrder(int index) {
		// 如果数组为空,或者arr.length=0
		if (arr == null || arr.length == 0) {
			System.out.println("数组为空,不能按照二叉树的前序遍历");
		}
		System.out.println(arr[index]);
		// 向左递归遍历
		if (index * 2 + 1 < arr.length) {
			preOrder(2 * index + 1);
		}
		// 向右递归遍历
		if ((index * 2 + 2) < arr.length) {
			preOrder(2 * index + 2);
		}
	}
}

运行结果:

在这里插入图片描述

八大排序算法中的堆排序,就会使用到顺序存储二叉树, 关于堆排序,放在<<树结构实际应用>> 章节讲解。
    
课后练习:
    完成对数组以二叉树中序,后序遍历方式的代码。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

低代码:轻松构建应用程序的新时代

在当今数字化时代&#xff0c;应用程序对于日常企业业务的开展&#xff0c;已经成为一种刚需。然而&#xff0c;应用程序开发的过程往往耗时耗力&#xff0c;对于企业来讲&#xff0c;是一笔不小的成本开支。低代码问世以来&#xff0c;一直在尝试为业务人员赋能&#xff0c;让…

通过Mock玩转Golang单元测试!

1.单元测试中的困难 如果项目中没有单元测试&#xff0c;对于刚刚开始或者说是规模还小的项目来说&#xff0c;效率可能还不错。但是一旦项目变得复杂起来&#xff0c;每次新增功能或对旧功能的改动都要重新手动测试一遍所有场景&#xff0c;费时费力&#xff0c;而且还有可能…

JS加密/解密之HOOK实战2

上一篇文章介绍了HOOK常规的应用场景&#xff0c;这篇我们讲一下HOOK其他原生函数。又是一个新的其他思路 很多时候&#xff0c;当我们想要某些网站的请求参数的时候&#xff0c;因为某些加密导致了获取起来很复杂。 这时候hook就十分方便了 源代码 var _JSON_Parse JSON.…

ShardingSphere数据分片之分表操作

1、概述 Apache ShardingSphere 是一款分布式的数据库生态系统&#xff0c; 可以将任意数据库转换为分布式数据库&#xff0c;并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。 Apache ShardingSphere 设计哲学为 Database Plus&#xff0c;旨在构建异构数据库上…

基于ssm高校实验室管理系统的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校实验室信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性…

(二)五种最新算法(SWO、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;简介 1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&…

区块链实验室(29) - 关闭或删除FISCO日志

1. FISCO日志 缺省情况下&#xff0c;FISCO启动日志模块&#xff0c;日志记录的位置在节点目录中。以FISCO自带案例为例&#xff0c;4节点的FISCO网络&#xff0c;24个区块产生的日志大小&#xff0c;见下图所示。 2.关闭日志模块 当节点数量增大&#xff0c;区块高度增大时&…

CMake ‘3.10.2‘ was not found in PATH or by cmake.dir property.

在部署Yolov5到安卓端的过程中出现&#xff1a;CMake ‘3.10.2’ was not found in PATH or by cmake.dir property. 原因&#xff1a; cmake版本太高&#xff0c;需要安装低版本的cmake 最开始下载的是默认最高版本的cmake,默认是3.22.1&#xff0c;解决方案是&#xff0c;下载…

MarsEdit 5 for Mac(博客编辑软件) - 博客创作的完美拍档!

您是一位热爱写作和分享的博主吗&#xff1f;如果是的话&#xff0c;那么MarsEdit 5 for Mac将成为您创作之旅中的完美拍档&#xff01;这款博客编辑软件为Mac用户提供了无与伦比的便捷和灵活性。 MarsEdit 5具有直观的界面和强大的功能&#xff0c;让您轻松管理和编辑多个博客…

使用 PyTorch 完全分片数据并行技术加速大模型训练

本文&#xff0c;我们将了解如何基于 PyTorch 最新的 完全分片数据并行 (Fully Sharded Data Parallel&#xff0c;FSDP) 功能用 Accelerate 库来训练大模型。 动机 &#x1f917; 随着机器学习 (ML) 模型的规模、大小和参数量的不断增加&#xff0c;ML 从业者发现在自己的硬件…

什么是网站劫持

网站劫持是一种网络安全威胁&#xff0c;它通过非法访问或篡改网站的内容来获取机密信息或者破坏计算机系统。如果您遇到了网站劫持问题&#xff0c;建议您立即联系相关的安全机构或者技术支持团队&#xff0c;以获得更专业的帮助和解决方案。

短视频矩阵系统多账号搭建技术源码(源头3年开发者技术独立搭建)

一、短视频账号矩阵系统源码搭建源码步骤&#xff1a; 1. 选择适合的云服务环境搭建虚拟机。这里以AWS为例&#xff0c;购买并配置相应数量的EC2实例以及相应的网络设置。 2. 根据需要搭建多个抖音、快手等平台的官方账号&#xff0c;并根据各个平台的要求和规则进行内容创作和…

Web漏洞扫描工具有哪些?使用教程讲解

作为网络安全工程师&#xff0c;了解并掌握各种Web漏洞扫描工具对于识别和防御网络威胁至关重要。以下是一些常用且广受推崇的Web漏洞扫描工具&#xff0c;它们覆盖了从自动扫描到深度定制的各种需求。希望你能用得到呢。 1. OWASP ZAP (Zed Attack Proxy) 原理&#xff1a;…

Selenium+Python自动化脚本环境搭建的全过程

*本文仅介绍环境的搭建&#xff0c;不包含任何脚本编写教程。 先整体说一下需要用到工具 1、Python环境&#xff08;包括pip&#xff09; 2、谷歌浏览器&#xff08;包括对应的WebDriver&#xff09; 详细步骤&#xff1a; 一、Python环境搭建 1、下载安装包 Python Relea…

BitComet(比特彗星)for Mac/Win:极速下载,畅享BT资源!

BitComet&#xff08;比特彗星&#xff09;是一款功能强大的BT下载客户端&#xff0c;专为Mac和Windows用户量身定制。它以极速下载、长效种子、磁盘缓存和边下边放等技术为特色&#xff0c;让您轻松畅享BT资源。 一、极速下载 BitComet&#xff08;比特彗星&#xff09;采用…

Oauth2.0 认证

目录 前言 1.介绍 2.Oauth2.0过程详解 3.Oauth 整合到 Spring Boot 实践 4.方法及配置详解&#xff1a; 总结 前言 Oauth2.0 是非常流行的网络授权表准&#xff0c;已经广泛应用在全球范围内&#xff0c;比较大的公司&#xff0c;如腾讯等都有大量的应用场景。 1.介绍 …

Selenium UI自动化实战过程记录

一.前言 1.1项目框架 项目如何使用框架&#xff1a; 本项目采用unitest框架 设计模式是如何应用&#xff1a;本项目采用pageobject设计模式 UI对象库思想 项目设计 一个模块&#xff08;被测项目的页面&#xff09;对应一个py文件及一个测试类&#xff08;测试文件&#x…

Azure Machine Learning - 使用 Azure OpenAI 服务生成文本

使用 Azure OpenAI 服务生成文本 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c;项目管理专业人士&…

快解析结合智邦国际使用教程

北京智邦国际软件技术有限公司&#xff0c;是经中华人民共和国工业和信息化部以及北京经济和信息化委员会评定和审核的双软企业&#xff0c;国家重点支持的高新技术企业。 十几年来致力于企业信息化&#xff0c;主要从事ERP、CRM、项目管理、人资管理、移动应用等企业管理软件的…

探索 SNMPv3 魔法:armbian系统安装snmp服务并通过SNMPV3进行连接控制

文章目录 说明SNMP服务的安装本机连接SNMPV3操作MIB Browser连接SNMPV3问题总结密码过短权限配置错误&#xff0c;导致OID不存在 说明 工具 建议尝试专业版ireasoning MIB brower&#xff0c;因为只有专业版支持SNMP v3的连接。当然&#xff0c;也可以尝试其他SNMP客户端工具 …