我很难尝试编写一个输出子节点的父节点的遍历函数。
看看示例b-tree
以下是我使用的样本数据集:
$nodes = array(
array('f','b'),
array('f','g'),
array('b','a'),
array('b','d'),
array('g','i'),
array('d','c'),
array('d','e'),
array('i','h')
);
我试图输出一个results
数组,其中包含所有包含父关联的子节点数组。
示例输出:
我无法弄清楚如何遍历直接父节点。
foreach($nodes as $node){
//CHECK IF NODE EXISTS
if(array_key_exists($node[1],$results)){
//DO NOTHING
array_push($results[$node[1]],$node[0]);
}
else{
//CREATE NEW CHILD ARRAY
$results[$node[1]] = [];
//PUSH PARENT INTO CHILD ARRAY
array_push($results[$node[1]],$node[0]);
}
}
foreach($results as $k => $v){
echo "child[$k] parents(" . implode($v,', ').")" ;
echo "</br>";
}
问题:如何以最有效的方式实现此输出?
答案 0 :(得分:0)
处理此类情况的最佳方法是使用递归函数。
driver.findElement(By.xpath("//div[1]/button[starts-with(@id,'dp')]")).click();
String js = "document.getElementById("field-label").style.display = "block";';
arguments[0].style.visibility='visible';";
点击此处查看实时代码:https://www.tehplayground.com/ElTdtP61DwFT1qIc
唯一的缺点是它会返回返回列表中的原始节点。但我认为你可以忍受这一点。
我认为树的更好表现是:
echo findParents('h',$nodes);
function findParents($find,$btree){
$parents;
foreach($btree as $node){
if($node[1]===$find){
$parents .=$find.',';
return $parents .= findParents($node[0], $btree);
}
}
return $find;
}
但是这需要对上面的代码稍作修改。
获取数组作为响应:
$nodes = array(
'f'=>array('d','g'),
'b'=>array('a','d'),
'g'=>array('i'),
'd'=>array('c','e'),
'i'=>array('h')
);
应该可以直接在findParents()中完成,但我现在没有时间研究它。