树形算法
作者:sa沙沙ssa | 来源:互联网 | 2014-05-12 16:49
树形算法<?
//测试数据
$ar=array(
array(id=>1,pid=>0),
//测试数据
$ar = array(
array(id=>1,pid=>0),
array(id=>2,pid=>0),
array(id=>3,pid=>2),
array(id=>4,pid=>0),
array(id=>5,pid=>3),
array(id=>6,pid=>1),
array(id=>7,pid=>1),
array(id=>8,pid=>6),
array(id=>9,pid=>7),
array(id=>10,pid=>9)
);
//排序函数
function cmd($a,$b) {
if($a[pid]==$b[pid]) return 0;
return $a[pid]>$b[pid]?1:-1;
}
//排序,为避免数据中父节点在子节点后面出现,这种情况在多次修改数据后经常会发生的
//排序的目的就是防止这种情况造成的混乱
uasort($ar,cmd);
//定义目标数组
$d = array();
//定义索引数组,用于记录节点在目标数组的位置
$ind = array();
foreach($ar as $v) {
$v[child] = array(); //给每个节点附加一个child项
if($v[pid] == 0) {
$i = count($d);
$d[$i] = $v;
$ind[$v[id]] =& $d[$i];
}else {
$i = count($ind[$v[pid]][child]);
$ind[$v[pid]][child][$i] = $v;
$ind[$v[id]] =& $ind[$v[pid]][child][$i];
}
}
//检查结果
print_r($d);
?>
算法特点:利用B+树概念,只用一次循环就可生成树形数组
推荐阅读
-
本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ...
[详细]
蜡笔小新 2024-12-26 15:32:56
-
本文介绍了一种通过逐对比较线段来求解交点的简单算法。此外,还提到了一种基于排序的方法,但该方法较为复杂,尚未完全理解。文中详细描述了如何根据线段端点求交点,并判断交点是否在线段上。 ...
[详细]
蜡笔小新 2024-12-26 14:48:56
-
-
本文详细介绍了 React 中的两个重要 Hook 函数:useState 和 useEffect。通过具体示例,解释了如何使用它们来管理组件状态和处理副作用。 ...
[详细]
蜡笔小新 2024-12-26 11:09:53
-
最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ...
[详细]
蜡笔小新 2024-12-26 11:03:58
-
本文总结了涡喷发动机动平衡的几种有效方法,探讨了不同传感器和软件工具的应用,旨在帮助爱好者和工程师更好地理解和实现动平衡调整,确保发动机高效稳定运行。 ...
[详细]
蜡笔小新 2024-12-26 10:44:53
-
汇编语言以其独特的特性和复杂的语法结构,一直被认为是编程领域中学习难度较高的语言之一。本文将探讨汇编语言中的等号伪指令及其对初学者带来的挑战,并结合社区反馈分析其学习曲线。 ...
[详细]
蜡笔小新 2024-12-26 10:34:21
-
本文探讨了几种常见的离散型随机变量分布,包括超几何分布、几何分布、二项分布及其衍生的负二项分布和泊松分布。通过具体的模型和推导过程,详细介绍了这些分布的概率质量函数、期望和方差等关键特征。 ...
[详细]
蜡笔小新 2024-12-25 21:29:59
-
本文探讨了如何在1000以内找到所有完美数,即一个数的因数(不包括自身)之和等于该数本身。例如,6是一个完美数,因为1 + 2 + 3 = 6。通过编程实现这一过程,可以更好地理解完美数的特性。 ...
[详细]
蜡笔小新 2024-12-25 19:21:06
-
本文详细解析了Java中Collection接口和Collections工具类的区别与联系,帮助开发者更好地理解和使用这两个核心组件。 ...
[详细]
蜡笔小新 2024-12-25 19:00:15
-
本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ...
[详细]
蜡笔小新 2024-12-25 18:20:32
-
最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ...
[详细]
蜡笔小新 2024-12-25 18:19:32
-
本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ...
[详细]
蜡笔小新 2024-12-25 17:47:23
-
本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ...
[详细]
蜡笔小新 2024-12-25 17:38:50
-
本文介绍 MATLAB 中匿名函数的构造方法及其在实际编程中的应用。匿名函数是一种简洁的函数表达方式,可以直接在命令行或脚本中定义。例如,定义一个平方函数 `sqr = @(x) x.^2`。此外,匿名函数作为句柄对象,可以方便地传递计算函数,用于求解方程组等复杂问题,如 `fun = @(x) (x-3).*(x-5)`。 ...
[详细]
蜡笔小新 2024-12-25 17:32:33
-
本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ...
[详细]
蜡笔小新 2024-12-25 16:16:05
-