Rumah > Soal Jawab > teks badan
Contohnya, jika saya ingin mencari id 4, saya harus kembalikan [1,3,4]
Jika saya ingin mencari id 9, saya harus kembalikan [1,3,9]
Jika saya ingin mencari id 7, tukar ia untuk mengembalikan [6,7]
Saya tidak tahu sama ada saya menerangkannya dengan jelas. Terima kasih atas jawapannya
大家讲道理2017-05-19 10:37:55
Ramai orang mengadu bahawa anda tidak menyiarkan kod tersebut, tetapi mereka yang boleh menjawab soalan adalah ikhlas!
Versi ringkas data asal percubaan (juga untuk orang lain mengesahkan penyelesaian mereka sendiri)
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}
]
}
];
Hasil keluaran carian 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
Direct recursive traversal, periksa dahulu sama ada id sama, kembalikan terus jika sama, jika berbeza, semak jika ada anak, rekod id lapisan semasa dan teruskan ke bawah . Jika tidak, kosongkan rekod dan langkau nod semasa dan lintasi Nod seterusnya pada tahap yang sama.
给我你的怀抱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;});
}