如何递归求出从根节点出发的每一条分支线上的所有节点(有先后顺序,除去返回父节点的节点)
假设有一个节点关系数组如下:
$allnode = array
(
'0' => array
(
'from' => 3349,
'to' => 3350
),
'1' => array
(
'from' => 3349,
'to' => 3352
),
'2' => array
(
'from' => 3350,
'to' => 3622
),
'3' => array
(
'from' => 3351,
'to' => 3623
),
'4' => array
(
'from' => 3352,
'to' => 3628
),
'5' => array
(
'from' => 3353,
'to' => 3631
),
'6' => array
(
'from' => 3354,
'to' => 3355
),
'7' => array
(
'from' => 3355,
'to' => 3356
),
'8' => array
(
'from' => 3622,
'to' => 3350
),
'9' => array
(
'from' => 3622,
'to' => 3351
),
'10' => array
(
'from' => 3622,
'to' => 4346
),
'11' => array
(
'from' => 3623,
'to' => 3351
),
'12' => array
(
'from' => 3623,
'to' => 3352
),
'13' => array
(
'from' => 3628,
'to' => 3352
),
'14' => array
(
'from' => 3628,
'to' => 3353
),
'15' => array
(
'from' => 3631,
'to' => 3353
),
'16' => array
(
'from' => 3631,
'to' => 3354
),
'17' => array
(
'from' => 4346,
'to' => 4347
),
'18' => array
(
'from' => 4347,
'to' => 3352
),
'19' => array
(
'from' => 4347,
'to' => 4346
)
);
$node_rows = array();
$node_from = array();
$flow_branch = array();//每一条分支上的节点
$first_id = 3349;//起始节点
function getBranch($next_id){
global $node_rows,$node_from,$allnode;
array_push($node_from, $next_id);
foreach($allnode as $key1=>$arr){
if($arr['from'] == $next_id){
if(!in_array($arr['to'],$node_from)){
array_push($node_rows,$arr['to']);
getBranch($arr['to']);
}
}
}
return $node_rows;
}
foreach($allnode as $key2=>$arr2){
if($first_id == $arr2['from']){
$node_rows = array($first_id,$arr2['to']);
$node_from = array();
$next_row = getBranch($arr2['to']);
if(!in_array($next_row,$flow_branch)){
$flow_branch[] = $next_row;
}
}
}
print_r($flow_branch);
这样只求出了从起点分叉的分支节点,没求出从中间分叉的节点。
$allnode = array
(
'0' => array
(
'from' => 3349,
'to' => 3350
),
'1' => array
(
'from' => 3349,
'to' => 3352
),
'2' => array
(
'from' => 3350,
'to' => 3622
),
'3' => array
(
'from' => 3351,
'to' => 3623
),
'4' => array
(
'from' => 3352,
'to' => 3628
),
'5' => array
(
'from' => 3353,
'to' => 3631
),
'6' => array
(
'from' => 3354,
'to' => 3355
),
'7' => array
(
'from' => 3355,
'to' => 3356
),
'8' => array
(
'from' => 3622,
'to' => 3350
),
'9' => array
(
'from' => 3622,
'to' => 3351
),
'10' => array
(
'from' => 3622,
'to' => 4346
),
'11' => array
(
'from' => 3623,
'to' => 3351
),
'12' => array
(
'from' => 3623,
'to' => 3352
),
'13' => array
(
'from' => 3628,
'to' => 3352
),
'14' => array
(
'from' => 3628,
'to' => 3353
),
'15' => array
(
'from' => 3631,
'to' => 3353
),
'16' => array
(
'from' => 3631,
'to' => 3354
),
'17' => array
(
'from' => 4346,
'to' => 4347
),
'18' => array
(
'from' => 4347,
'to' => 3352
),
'19' => array
(
'from' => 4347,
'to' => 4346
)
);
$node_rows = array();
$node_from = array();
$flow_branch = array();//每一条分支上的节点
$first_id = 3349;//起始节点
function getBranch($next_id){
global $node_rows,$node_from,$allnode;
array_push($node_from, $next_id);
foreach($allnode as $key1=>$arr){
if($arr['from'] == $next_id){
if(!in_array($arr['to'],$node_from)){
array_push($node_rows,$arr['to']);
getBranch($arr['to']);
}
}
}
return $node_rows;
}
foreach($allnode as $key2=>$arr2){
if($first_id == $arr2['from']){
$node_rows = array($first_id,$arr2['to']);
$node_from = array();
$next_row = getBranch($arr2['to']);
if(!in_array($next_row,$flow_branch)){
$flow_branch[] = $next_row;
}
}
}
print_r($flow_branch);
这样只求出了从起点分叉的分支节点,没求出从中间分叉的节点。
...全文
相关推荐
springboot524基于MVC模式的红色革命文物征集管理系统的设计与实现--论文pf.zip
springboot524基于MVC模式的红色革命文物征集管理系统的设计与实现--论文pf
树形结构中反向遍历以获取父节点路径的方法
在计算机科学中,树是一种被广泛采用的数据结构,它模拟了具有层级关系的对象的层次结构。树由节点组成,每个节点都包含值和指向其他节点的指针。在树结构中,最顶层的节点被称为根节点。树中的每个节点可以有零个或多个子节点,这些子节点被称作父节点的“子节点”。- 父节点:在树形结构中,如果节点A是节点B的前驱节点,则称A为B的父节点(或上层节点)。- 子节点:在树形结构中,如果节点A是节点B的后继节点,则称A为B的子节点(或下层节点)。对于树结构的深入理解,首先需要掌握的是如何定义和描述节点之间的父子关系。
springboot524基于MVC模式的红色革命文物征集管理系统的设计与实现--论文pf(文档+源码)_kaic.zip
计算机毕业设计
【计算机网页程序设计项目源码】524基于MVC模式的红色革命文物征集管理系统的设计与实现--论文pf.zip
具体系统介绍看我的博客空间 搜索对应的题目,本代码适合学习java 网页代码如自己能力有限 运行不出来,可以联系作者购买人工远程调试服务 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训。
带论文和PPTspringboot524基于MVC模式的红色革命文物征集管理系统的设计与实现--论文pf.zip
java本人亲自运行,所有项目都有运行视频,有问题看我主页!


基础编程
