Maison > Questions et réponses > le corps du texte
Par exemple, si je veux trouver un identifiant de 4, je dois retourner [1,3,4]
Si je veux trouver un identifiant de 9, je dois retourner [1,3,9]
Si je veux trouver un identifiant de 7, changez-le pour revenir [6,7]
Je ne sais pas si je l’ai expliqué clairement. Merci pour la réponse
大家讲道理2017-05-19 10:37:55
Beaucoup de gens se plaignent que vous n’ayez pas posté le code, mais ceux qui peuvent répondre aux questions sont sincères !
Version simplifiée des données expérimentales originales (également pour que d'autres puissent vérifier leurs propres solutions)
var nodes = [
{
"id": 1,
"children": [
{
"id": 3,
"children": [
{"id": 4},
{"id": 9}
]
},
{
"id": 10
},
]
},
{
"id": 2
},
{
"id": 6,
"children" : [
{ "id": 5},
{ "id": 7},
{ "id": 8}
]
}
];
Résultats de sortie de recherche JS
//递归实现
//@leafId 为你要查找的id,
//@nodes 为原始Json数据
//@path 供递归使用,不要赋值
function findPathByLeafId(leafId, nodes, path) {
if(path === undefined) {
path = [];
}
for(var i = 0; i < nodes.length; i++) {
var tmpPath = path.concat();
tmpPath.push(nodes[i].id);
if(leafId == nodes[i].id) {
return tmpPath;
}
if(nodes[i].children) {
var findResult = findPathByLeafId(leafId, nodes[i].children, tmpPath);
if(findResult) {
return findResult;
}
}
}
}
//用法
console.log(findPathByLeafId(4, nodes)); //输出 [1,3,4]
console.log(findPathByLeafId(9, nodes)); //输出 [1,3,9]
console.log(findPathByLeafId(7, nodes)); //输出 [6,7]
滿天的星座2017-05-19 10:37:55
Pouvez-vous poster le code... C'est difficile de traiter une image comme celle-ci...
巴扎黑2017-05-19 10:37:55
Parcours récursif direct, vérifiez d'abord si les identifiants sont les mêmes, revenez directement s'ils sont identiques, s'ils sont différents, vérifiez s'il y a des enfants, enregistrez l'identifiant du calque actuel et continuez à parcourir vers le bas. Sinon, effacez l'enregistrement, ignorez le nœud actuel et parcourez le nœud suivant au même niveau.
给我你的怀抱2017-05-19 10:37:55
function solution(arr,id){
var ans=[];
var flag=false;
function dps(obj,depth){
ans[depth]=obj.id;
if(obj.id==id){
flag = true;
}else{
if(obj.children)
for(var i=0;i<obj.children.length;i++){
flag = dps(obj.children[i],depth+1);
if(flag)
break;
}
}
if(flag)
return flag;
ans[depth]=undefined;
}
arr.forEach(function(a){if(dps(a,0))return;})
return ans.filter(function(obj){return undefined!=obj;});
}