「java树状数组」树状数组是什么

博主:adminadmin 2023-01-23 02:30:07 417

本篇文章给大家谈谈java树状数组,以及树状数组是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何用Java实现树形结构啊?

package tree;

import java.util.LinkedList;

import java.util.List;

/**

* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历

*

* 参考资料0:数据结构(C语言版)严蔚敏

*

* 参考资料1:

*

* 参考资料2:

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

public class BinTreeTraverse2 {

private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

private static ListNode nodeList = null;

/**

* 内部类:节点

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

private static class Node {

Node leftChild;

Node rightChild;

int data;

Node(int newData) {

leftChild = null;

rightChild = null;

data = newData;

}

}

public void createBinTree() {

nodeList = new LinkedListNode();

// 将一个数组的值依次转换为Node节点

for (int nodeIndex = 0; nodeIndex array.length; nodeIndex++) {

nodeList.add(new Node(array[nodeIndex]));

}

// 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树

for (int parentIndex = 0; parentIndex array.length / 2 - 1; parentIndex++) {

// 左孩子

nodeList.get(parentIndex).leftChild = nodeList

.get(parentIndex * 2 + 1);

// 右孩子

nodeList.get(parentIndex).rightChild = nodeList

.get(parentIndex * 2 + 2);

}

// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理

int lastParentIndex = array.length / 2 - 1;

// 左孩子

nodeList.get(lastParentIndex).leftChild = nodeList

.get(lastParentIndex * 2 + 1);

// 右孩子,如果数组的长度为奇数才建立右孩子

if (array.length % 2 == 1) {

nodeList.get(lastParentIndex).rightChild = nodeList

.get(lastParentIndex * 2 + 2);

}

}

/**

* 先序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void preOrderTraverse(Node node) {

if (node == null)

return;

System.out.print(node.data + " ");

preOrderTraverse(node.leftChild);

preOrderTraverse(node.rightChild);

}

/**

* 中序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void inOrderTraverse(Node node) {

if (node == null)

return;

inOrderTraverse(node.leftChild);

System.out.print(node.data + " ");

inOrderTraverse(node.rightChild);

}

/**

* 后序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void postOrderTraverse(Node node) {

if (node == null)

return;

postOrderTraverse(node.leftChild);

postOrderTraverse(node.rightChild);

System.out.print(node.data + " ");

}

public static void main(String[] args) {

BinTreeTraverse2 binTree = new BinTreeTraverse2();

binTree.createBinTree();

// nodeList中第0个索引处的值即为根节点

Node root = nodeList.get(0);

System.out.println("先序遍历:");

preOrderTraverse(root);

System.out.println();

System.out.println("中序遍历:");

inOrderTraverse(root);

System.out.println();

System.out.println("后序遍历:");

postOrderTraverse(root);

}

}

testdx8000h是什么意思

单分支程序(if then)

双字长数存放于dx和ax寄存器(高位于dx),求该数的绝对值(用16位指令)

算法分析:判断数正负,正数(首位为0),不需处理,负数(首位为1),对该数求补,即反码加一

复合分支程序

从键盘输入一位十六进制数,将其转换为十进制数显示输出

算法分析:

输入为数字(30h~39h),直接输出

为大写字母A~F(41h~46h)时,可减11h

a~f时(61h~66h),可减去31h得到30h~35h(0~5的ascii码),再输出2位十进制数字,

其他输入为非法输入,退出程序

多分支程序

采用分支向量表法,int 21h指令就是根据中断类型号21h*4得84h直接到84h内存中的向量表取出中断向量(即系统子程序的首地址),来执行一段程序,我们把各分支地址集中存放于分支向量表中,根据分支号快速进入分支

根据键盘输入的一位数字1~4,使程序转移到4个不同的分支中去,以显示键盘输入的数字

算法分析:建立一个分支向量表branch,集中存放4个分支的偏移地址,因偏移地址为16位,所以每两个字节存放一个偏移地址,据输入的数字指向分支向量表,从表中取出对应分支的偏移地址,用jmp branch[bx]指令间接寻址方式转向对应分支

循环程序设计

循环有两种结构,do while和do null

do while先判断条件,再执行循环,do null先循环一遍再判断要不要下次循环

把bx寄存器中的二进制用16进制数格式显示输出

算法分析:

bx寄存器每4位表示一位16进制数位,从左到右循环移位,每移四位,就把要显示的4位二进制位移到最右边。取出最右边的4位,加上30h,转换成8位ascii字符码。因显示输出的十六进制是数字(30h~39h)和A~F(41h~46h),所以8位二进制大于39h时,应再加上7,程序采用计数循环,计数值为4

从键盘输入一个四位的十六进制数(其中字母大写),并将其转换为二进制数显示输出

算法分析:该程序需要两段循环,第一个循环接收键盘输入的16进制数,30h~39h时减30h,输入为41h~46h时,减37h,应把四次的输入拼装成四位16进制数存放在bx寄存器,第二个循环利用16次位移从左到右显示bx寄存器中的二进制数

条件循环程序

循环体有分支时,依据标志位判断,标志位为1表示执行a操作,为0表示执行b操作等,把这种标志字称为逻辑尺

先从键盘输入8位二进制数作为逻辑尺,再从键盘输入一个英文字母,根据逻辑尺当前的最高位标志显示输出该英文字母的相邻字符,标志位为0则显示前趋字符,标志位为1则显示其后继字符,显示相邻字符后,逻辑尺循环左移一位再接收下一个英文字母的输入,并依据逻辑尺显示相邻字符,直到回车键结束程序

算法分析:8位二进制数的输入构成一个8次循环,把输入整合到

8位寄存器bl中。键盘输入一个英文字母后依据逻辑尺最高标志位显示相邻字符,把最高位移到cf位,以cf位决定显示,构成一个条件循环,以回车键退出循环

打开CSDN,阅读体验更佳

算法导论考试题目_Spike_Bebop的博客

A 子问题必须是一样的 B 子问题不能够重复 C 子问题的解可以合并 D 原问题和子问题使用相同的方法解 14.下列算法中不能解决0/1背包问题的是(A ) A 贪心法 B 动态规划 C 回溯法 D 分支限界法 ...

继续访问

Matlab入门基础详解_weixin_43731886的博客

1.直接输入法 matlab在创立数组时以逗号或空格表示分列,分号或回车表示分行。数组开头“[”、结尾“]” 行数组:如a=[1,2,3,8,-1] 列数组: b=[1;2;3;8;-1] 或a’ 矩阵:A= [2,4,1;8:-2:4;2,4,6] ...

继续访问

实验1:汇编语言语法练习与分支循环子程序设计.doc

实 验 报 告 2018 / 2019 学年 第 1学期 课程名称 微型计算机原理与接口技术 实验名称 实验1汇编语言语法练习与分支循环子程序设计 实验时间 2018 年 10 月 22 日 指导单位 通信工程学院 指导教师 祁正华 学生姓名 杨单妮 班级学号 17120205 学院(系) 通信工程学院 专 业 通信工程 PAGE 5 实 验 报 告 实验名称 汇编语言语法练习与分支循环子程序设

热门推荐 第一章: 利用神经网络识别手写数字

人类视觉系统是大自然的一大奇迹。 考虑下面的手写数字序列: 大部分人能够毫不费力的识别出这些数字是 504192。这种简单性只是一个幻觉。在我们大脑各半球,有一个主要的视觉皮层,即V1,它包含1.4亿个神经元以及数以百亿的神经元连接。而且人类不只是有V1,还有一系列的视觉皮层——V2,V3,V4和V5,它们能够执行更加复杂的图像处理。我们可以将大脑想象成一台超级计算机

继续访问

数据结构复习提纲(必考知识点整理)_a1043362562的博客_数据...

1.数据:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序所处理的符号的总称。 2.数据元素:数据元素是数据的基本单位,是数据这个集合中的个体,也称之为元素,结点,顶点记录。

继续访问

MATLAB基础_dfql83704的博客

3.2.1 直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以...

继续访问

微机原理与接口技术-指令

上级目录 目录 指令分类 数据传送指令 通用数据传送指令 累加器专用传送指令 地址传送指令 标志传送指令 数据类型转换指令 算数运算指令 加法指令 减法指令 乘法指令 除法指令 十进制调整指令 位运算指令 逻辑运算指令 移位指令 循环移位指令 串操作指令 基本串操作指令 重复前缀指令 控制转移指令 无条件转移指令(长转移) 条件转移指令(短转移, -128~127的距离内) 循环控制指令 过程调用与返回指令 中断指令 处理器控制指令 标志位操作指令

继续访问

8086系列(8):逻辑尺

题目 设有数组X和Y。X数组中有X1,…,X10;Y数组中有Y1,…,Y10。试编制程序计算Z1=X1+Y1,Z2=X2+Y2,Z3=X3-Y3,Z4=X4-Y4,Z5=X5-Y5,Z6=X6+Y6,Z7=X7-Y7,Z8=X8-Y8,Z9=X9+Y9,Z10=X10+Y10,结果存入Z数组。 思路 对于这种问题可以使用循环结构来完成,由于每次循环的操作位不同,我们可以事先设立标志位存放于逻辑尺中,进入循环后取出每一个位就可以判断做哪种操作了。 代码 datasg segment x dw 0,1,

继续访问

数据结构算法笔记_Alanders的博客

所有的简单排序方法(包括:直接插入、冒泡和简单选择)和堆排序的空间复杂度为O(1) 快速排序为O(logn),为栈所需的辅助空间 归并排序所需辅助空间最多,其空间复杂度为O(n) 链式基数排序需附设队列首尾指针,则空间复杂度为O(rd) 排...

继续访问

[学习笔记] python深度学习---第四章 机器学习基础_Cr_南猫的博客-CS...

一、机器学习的四个分支 1. 监督学习 这属于目前最常见的机器学习类型。给定一组样本,它可以学会将输入数据映射到已知目标(也叫标注annotation)。近年来广受关注的深度学习应用几乎都属于监督学习,比如光学字符识别、语音识别、图像识别和...

继续访问

逻辑尺的使用

今天看汇编程序,看到一道题,X1-Y1,X2-Y2,X3+Y3....X8-Y8,X9+Y9,X10-Y10,加法,减法毫无规律可循,最后书本介绍了“逻辑尺”的方法:设置一个设置了一个字型的变量,然后使用逻辑右移,读取CF中的1/0,从而确定知道该次运算的预算法则。闲来无聊,便用JAVA模拟了一下逻辑尺的使用package logicRule;/* * 逻辑尺的模拟使用 *

继续访问

汇编语言实现四则运算

32 位模式下,MUL(无符号数乘法)指令有三种类型: 第一种执行 8 位操作数与 AL 寄存器的乘法; 第二种执行 16 位操作数与 AX 寄存器的乘法; 第三种执行 32 位操作数与 EAX 寄存器的乘法。 例如,当 AX 乘以一个 16 位操作数时,乘积存放在 DX 和 AX 寄存器对中。其中,乘积的高 16 位存放在 DX,低 16 位存放在 AX 32 位模式下,DIV(无符号除法)指令执行 8 位、16 位和 32 位无符号数除法。其中,单寄存器或内存操作数是除数。格式如下: ..

继续访问

慕课袁春风老师《计算机系统基础》一二三部分练习题_GloomyHarbor的博客...

解析: D、现代计算机的主存储器由半导体存储器构成,其中存放信息的地方称为存储阵列;每个存储阵列包含若干个存储单元,每个存储单元由若干个记忆单元(cell)构成,每个记忆单元存放一位信息(0或1)。 某一台计算机的主存储器编址方式,总是...

继续访问

python中的小知识点_代码小学渣的博客

input().split()用法:接收多个输入。返回的数据类型是str year,month,day=map(int,input().split('/'))#2018/2/1#如果是整数就需要转化为int才能正常使用。 map()用法:map(function, iterable, …),python3 返回迭代器,要加li...

继续访问

汇编语言程序设计 实验6 分支程序设计

本文章为个人博客的备份版本、作者:小游、作者博客:点击访问 实验目的:掌握分支程序的基本编程方法。熟悉数制转换。用LOOP指令、条件转移指令和向量地址法实现程序转移。 1.编写程序,如果输人的是大写字母,则输出对应的小写字母;如果输入的是小写字母则输出对应的大写字母;如果输人的是数字,原样输出;按回车结束。 code segment assume cs:code ; 代码部分 start: inchr: ; 这里我们读取键盘的输入 mov ah,1 ;输入字符 int 21.

继续访问

汇编语言及应用——分支结构程序设计

一、实验目的 掌握条件转移指令的使用方法及指令对标志寄存器中各标志位的影响;掌握标志位和转移指令之间的关系;会用条件转移指令和无条件转移指令设计多分支结构程序;掌握设置断点调试程序的方法。 二、示 例 内存自BUF单元开始的缓冲区连续存放着10个学生的英文分数,编程序统计其中90~100,60~89,60以下者各有多少人?并把90-100分人数结果存放在P1单元中、60-89分人数结果存放在P2单元中,60分以下人数结果存放在P3单元中(P1、P2、P3为数据段的单元),最后把P1、P2、P3中的数以”P

继续访问

汇编语言编一程序段,求双字(DX,AX)的绝对值

a100 mov ax,ffff;把双字长数的低字放到AX中 mov dx,ffff;把双字长数的高字放到DX中 test dx,8000;测试双字长数的符号 jz 0113;如果是非负数,则直接保存 neg dx;如果是负数,则求补 neg ax;求补 sbb dx,0 int 3 g=073f:0100 0113 运行附图如下: ...

继续访问

汇编语言的程序设计方法(循环结构和分支结构)

汇编语言中常见的形式有:顺序程序设计,分支程序设计,循环程序设计以及子程序设计 1.今天通过实例来详细说明分支程序设计,和循环程序设计 分支程序设计实例 给定一下符号函数: 给定X值,假设为-25,且存放于X单元,函数值Y存放于Y于单元,根据给定的X值确定Y得值 程序如下 DATAX SEGMENT x DB-25 y DB? DATAX ENDS CODEX SEG...

继续访问

第五章 5.7汇编程序设计举例

5.7汇编程序设计举例 汇编源程序的设计步骤: ①分析问题,建立数学模型 ②确定最佳算法 ③合理分配存储单元和寄存器 ④绘制流程图 ⑤编写程序 ⑥调试程序 5.7.1程序基本结构 程序设计的三种基本结构:顺序结构、选择结构、循环结构 顺序结构:顺序结构程序中,完全按照指令先后顺序逐条执行。 选择结构 选择结构又称分支结构,有以下两种形式: ①它们共同的特点是:运行方向是向前的,在某一种特定条件下,只能执行多个分支中的一个分支。 ②程序的分支一般用...

继续访问

微机原理复习整理

第一章 微型计算机系统概述 1. 微型计算机系统组成 微处理器:运算器、控制器、寄存器 微型计算机:输入输出接口、总线、内存 微型计算机系统:由硬件和软件共同组成的完整的计算机系统 2. 系统总线 地址总线AB 输出将要访问的内存单元或I/O端口的地址 地址线的多少决定了系统直接寻址存储器的范围 数据总线DB CPU读操作时,外部数据通过数据总线送往CPU CPU写操...

继续访问

树状数组

树状数组 学之前感觉这是个非常非常难的数据结构,学完才发现也没有想象中那么难,但是题可以出的非常难。 这里就有一些同学坚持认为树状数组没有用,其实树状数组虽然功能少一点,却也是很有优势的。1.常数小;2.代码短;3.内存小; 翻了翻学习资料的文件夹,发现关于这两个数据结构的课件还是比较多的,难度分布也非常的广泛... 前两天强行抓着wzx讲这个,感觉在讲的过程中自己也更明白...

继续访问

ARM异常、中断以及他们的向量表分析

作者:wogoyixikexie@gliet 以前,我一直很疑惑这个“ARM异常、中断以及他们的向量表”是怎么回事,他们到底是怎么实现的,没有想到今天偶然看到(ARM System Developers Guide: Designing and Optimizing System Software的ARM异常、中断以及他们的向量表的章节,豁然开朗。——ARM嵌入式系统开发:软件设计与优

继续访问

Java基础之数组与集合

Java基础之数组与集合一、数组 一、数组   数组保存的是一组有顺序的、具有相同类型的数据。在一个数组中,所有数据元素的数据类型都是相同的。可以通过数组下标(索引)来访问数组,数据元素根据下标的顺序,在内存中按顺序存放。本节的主要内容是介绍数组的基础知识。   数组的定义: 数据类型 数组名 [] = new 数据类型[数组长度];   要想知道数组的大小可以使用数组的 length 属性 语法:数组名.length   初始化: int arr [] = new int[12]; arr[0] =

继续访问

【汇编程序】求一个双字节数AX:BX的绝对值,放入CX:DX中。

【汇编程序】求一个双字节数AX:BX的绝对值,放入CX:DX中,高位放入CX CODE SEGMENT ASSUME CS:CODE START: MOV CX,AX MOV DX,BX TEST CX,8000H ;将CX与8000H与操作 看是否最高位为1 JZ EXIT ;若结果为0 则为整数 结束dos NOT DX NOT CX ADD DX,1 ;将BX取反+1 即求补 ADC CX,0 ;目的是将CF进位加进去 因为为双字 末

继续访问

汇编实验二 分支与循环程序设计

实验二 分支与循环程序设计 一、实验目的 1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。 2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。 3、初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。 二、实验环境与设备 计算机一台,并且安装Windows操作系统和macro assembler 5.0以上版本的系统软件。 三、预备知识 1、掌握汇编...

继续访问

汇编语言的分支程序设计与循环程序设计

汇编语言的分支程序设计: 例题1:比较三个无符号数的大小,按照从大到小的顺序排列 关键的语句是:无符号数,因此所用语句是JAE实现跳转: 此外比较两个操作数所用的是CMP,交换两个操作数的是XCHG 书上的代码: 代码1:这样写法比较占用寄存器,但是寄存器之间交换数值比较快 ;程序名称:实现三个无符号数的由小到大的排序 DATAS SEGMENT BUFFER DB ...

继续访问

Part2【程设】分支程序设计+循环程序设计

一、分支程序设计 if语句的易错点、switch的易错点。 二、循环程序设计 for循环、while、do-while常见的错误。

继续访问

最新发布 win32汇编·指令

win32汇编·指令常用伪指令数字常量字符串常量预留空间复制重复符号定义伪指令等号伪指令操作符伪指令算术运算符逻辑操作符关系操作符框架定义样例函数声明语句include 语句程序结束跨行语句数据存放invoke伪指令MessageBox输入输出有关的API函数printfscanf分支与循环单分支结构无符号类比IF_THEN_ELSE结构升序数组查找一个数(折半查找)SWITCH_CASE结构分支程序 [名字] 助记符 操作数 [;注释] 常用伪指令 类型 助记符 简写 字节数 数字

继续访问

使用分支向量

java中的tree是什么意思

tree 英 [tri:]   美 [tri]  :n. 树;木料;树状图;宗谱;vt. 把?赶上树;使处于困境;把鞋型插入(鞋内)

短语

family tree 家族树 ; 家谱 ; 家庭树 ; 族谱

Suffix Tree [计] 后缀树 ; 后缀树实现 ; 字尾树

tree hyrax 树蹄兔属 ; 树蹄兔

Leftist tree 左偏树 ; 左倾树

Tree sitting 树坐 ; 国际常见的树坐

Tree spiking 树钉

Metric tree 度量树

Fenwick tree 树状数组

camphor tree [林] 樟树 ; [林] 樟脑树 ; 香樟树 ; 香樟

扩展资料

双语例句

1、You are absolutely correct. The leaves are from a bay tree

你说得很对,这是月桂树的叶子。

2、The peach tree is wormy.

桃树长虫了。

3、He dug a hole in our yard on Edgerton Avenue to plant a maple tree when I was born.

我出生的时候,他在埃杰顿大街我们家的园圃里挖了个坑,种了棵枫树。

4、China has the world's most ancient tree species--metasequoia.

中国有世界最古老的树种--水杉。

5、A vandal with a chainsaw cut down a tree.

一个故意破坏公物的人用链锯伐倒了一棵树。

java实现对树形结构(文件夹式)数据数组进行排序

这个问题本质上就是个数据结构的问题,所谓排序和查找效率依赖的是算法和数据结构的配合,你现在定下了链表(没有具体说明的话,这里应该指的是单向链表吧)、数组和二叉树,这几个之中,那排序和查找的数据就看用什么算法和相应的数据结构配合了~~~

排序算法中,快速排序是最快的,比较适合用链表来处理,但是链表的查找是比较慢的(双向链表的话可以加快查找速度)。

数组排序会比较慢,不是算法的问题,而是数组的调整因为需要位移,但是数组一旦排号顺序后,查找是很快的——折半查找。

二叉数较为平局,排序可以采用堆排序,查找可以建二叉排序树来找(用B+或B-树的话可以更快)。

个人看法,不一定对,欢迎拍砖,具体代码知道算法了就自己上网找吧。

树状数组与离散化

树状数组主要用来求解 前缀和、区间和、逆序对、区间和的个数和相关求个数的问题 等等问题,最重要的是要考虑怎么将题目给的信息转化为一个前缀和,这一点是比较难想到的。

n 就是原数组,初始化时 tr = new int[n + 1];

当然也可以将这些变量和方法封装到一个类中,方便重复使用,不过一般的树状数组的问题只需要一个树状数组即可。

离散化就是当数据个数较少但比较分散并且我们只关心相对大小时,将他们的值分别映射到区间 [1, N] ,这样就可以依赖树状数组来处理数据了。

要注意映射后的左端点为 1 ,这样可以方便树状数组操作,树状数组的 sum(i) 方法就表示 目标值小于等于 i 的前缀和 ,通过该 sum 方法做减法、求最值、比较大小等等就可以方便的求出一些特定问题。

另外,排序也可以直接映射,不过java中没有 unique 方法,无法去重。去重的步骤可以提高效率,不影响正确性。

关于java树状数组和树状数组是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。