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

http://www.oschina.net/question/572366_235443?fromerr=kI0toIyF

Folder有如下属性:id,pid(父节点),sequence(同级节点排序依据)
有如下数据:
F1 (1,0,1)
F2 (2,0,2)
F3 (3,4,1)
F4 (4,2,1)
F5 (5,1,1)
F6 (6,1,2)
F7 (7,6,1)
F8 (8,0,3)
树形结构为:
(1,0,1) F1
(5,1,1) F5

(6,1,2) F6

(7,6,1) F7

(2,0,2) F2
(4,2,1) F4

(3,4,1) F3
(8,0,3) F8
怎么实现对以上数据以sequence大小为依据进行排序,实现按树形结构输出
F1、F5、F6、F7、F2、F4、F3、F8


import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class FolderTree
{

public static void main(String[] args)
{
int[] F1 = { 1, 0, 1 };
int[] F2 = { 2, 0, 2 };
int[] F3 = { 3, 4, 1 };
int[] F4 = { 4, 2, 1 };
int[] F5 = { 5, 1, 1 };
int[] F6 = { 6, 1, 2 };
int[] F7 = { 7, 6, 1 };
int[] F8 = { 8, 0, 3 };

List<int[]> list = new ArrayList<int[]>();
list.add(F1);
list.add(F2);
list.add(F3);
list.add(F4);
list.add(F5);
list.add(F6);
list.add(F7);
list.add(F8);

LinkedList<int[]> result = new LinkedList<int[]>();
LinkedList<int[]> f = sort(list, result, 0);
for(int i = 0; i < f.size(); i++)
{
System.out.print(f.get(i)[0] + ",");
System.out.print(f.get(i)[1] + ",");
System.out.println(f.get(i)[2]);
}
}

private static LinkedList<int[]> sort(List<int[]> list , LinkedList<int[]> result, int father)
{
List<int[]> temp = new ArrayList<int[]>();

for(int i = 0; i < list.size(); i++)//最高层,临时存放
{
if(list.get(i)[1] == father)
{
temp.add(list.get(i));
}
}

if(temp.size() < 1)
{
return result;
}
else//递归
{
for (int j = 0; j < list.size(); j++) //删除最高层
{
if (list.get(j)[1] == father)
{
list.remove(j);
}
}

for (int i = 0; i < temp.size() - 1; i++) //对最高层排序
{
for (int j = i + 1; j < temp.size(); j++)
{
if (temp.get(i)[2] > temp.get(j)[2])
{
int [] t = temp.get(i);
temp.set(i, temp.get(j));
temp.set(j, t);
}
}
}

for (int i = 0; i < temp.size(); i++)
{
result.add(temp.get(i));
sort(list, result, temp.get(i)[0]);
}
return result;
}

}
}


js算法

function sortTree(records,result,father){
var temp = [];
for(var i = 0; i < records.length; i++) {
var nodeValue = records[i];
var pId = Number(nodeValue [4]);
if(pId == father) {
temp.push(records[i]);
}
}
if(temp.length < 1) {
return result;
}else {
for (var j = 0; j < records.length; j++) {
if (records[j] == father) {
var reTemp=[];
for (var k = 0; k < records.length; k++){
if(k!=j){
reTemp.push(records[k]);
}
}
records=reTemp;
}
}
for (var i = 0; i < temp.length; i++) {
result.push(temp[i]);
var nodeValue = temp[i];
var id = Number(nodeValue [0]);
sortTree(records,result, id);
}
return result;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 指夹脉冲血氧仪是一种医疗设备,可以透过指头测量人体的血氧饱和度和脉率等生理参数。现在市场上的指夹脉冲血氧仪大多采用了msp430芯片作为控制芯片,因为这款芯片具有体积小、功耗低的特点,非常适合用来设计小型、低功耗的医疗设备。 基于msp430的指夹脉冲血氧仪设计需要包括两个主要部分:传感器和控制芯片。传感器通常采用LED发射器和接收器,LED发射器会通过指尖照射出一束红光和红外光,接收器会收集经过手指透射的光线。控制芯片会对传感器收集到的数据进行采集、处理和计算,最终得出血氧饱和度和脉率等生理参数。 在设计过程中需要考虑到传感器和控制芯片之间的数据接口,以及系统的可靠性和精度。同时,还需要对输送和存储的数据进行安全加密,保证患者的隐私安全。 总体来说,基于msp430的指夹脉冲血氧仪设计具有低功耗、小型化、精度高、数据安全等优点。这种设备具有广泛的医疗应用前景,在临床上会起到重要的作用。 ### 回答2: 指夹脉冲血氧仪是一种常见的医疗设备,用于监测患者的血氧饱和度和脉率。本设计基于MSP430单片机,具有高精度、低功耗、体积小等特点。 该血氧仪通过指夹传感器获取患者的血氧饱和度和脉率信号,并将这些信号传输给MSP430单片机进行处理。该单片机使用了高精度ADC模块来对信号进行采样和转换,从而得出准确的血氧饱和度和脉率数据。同时,该单片机还具有低功耗的特点,可以长时间运行,适合在医疗场所长期使用。此外,由于体积小,方便携带,对于床旁患者的检测非常有利。 本设计还考虑了数据的处理和显示问题。该血氧仪采用LCD屏幕显示患者的血氧饱和度和脉率数据,并通过蓝牙模块将数据传输给移动设备,方便医护人员进行监控和记录。另外,可以根据实际需求进行二次开发,增加数据储存和分析功能,实现更加精确的健康监测。 总之,该基于msp430的指夹脉冲血氧仪设计具有高精度、低功耗、体积小、数据处理和显示多样化等特点,为临床血氧监测提供了更加有效的解决方案。 ### 回答3: 指夹脉冲血氧仪是一款用于测量人体脉搏和血氧饱和度的设备。基于msp430的设计方案是一种低功耗、高效率的解决方案。该设备使用了光电传感器来检测红外光和可见光的差异,从而得出脉搏信号和血氧饱和度。 基于msp430的指夹脉冲血氧仪设计主要包括光电传感器模块、信号处理模块和显示模块。在光电传感器模块中,使用动态光学系统来抵消不同光程和散射所导致的误差,使用高灵敏度的光电传感器来增强检测信号。信号处理模块使用数字信号处理器来处理检测信号,实现脉搏波和血氧饱和度的计算。 该设计方案使用msp430处理器作为系统主控芯片,通过调节处理器主频和功率管理模块来实现低功耗操作。同时,优化功率管理模块的设计,使得设备在长时间使用过程中,能够最大程度地减少能耗和损耗。 在使用方面,用户只需要将设备卡在食指上即可完成检测,显示模块会显示出血氧饱和度、脉搏波等信息。整个设备的设计简单、可靠、高效,操作方便,适用于各种临床场合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值