Я хочу, чтобы пройти следующее дерево структуру хвоста рекурсивно без отступая на петлях:Хвоста Рекурсивного Дерево Traversal без петель
const o = {x:0,c:[{x:1,c:[{x:2,c:[{x:3},{x:4,c:[{x:5}]},{x:6}]},{x:7},{x:8}]},{x:9}]};
0
/\
1 9
/| \
2 7 8
/| \
3 4 6
|
5
Желаемый результат: /0/1/2/3/4/5/6/7/8/9
Я думаю замыкание требуется разрешить хвостовую рекурсию. Я пробовал это до сих пор:
const traverse = o => {
const nextDepth = (o, index, acc) => {
const nextBreadth =() => o["c"] && o["c"][index + 1]
? nextDepth(o["c"][index + 1], index + 1, acc)
: acc;
acc = o["c"]
? nextDepth(o["c"][0], index, acc + "/" + o["x"]) // not in tail pos
: acc + "/" + o["x"];
return nextBreadth();
};
return nextDepth(o, 0, "");
};
traverse(o); // /0/1/2/3/4/5/7/9
Братья, сестры, не пересекаются должным образом. Как это может быть сделано?
http://codereview.stackexchange.com/questions/47932/recursion-vs-iteration-of-tree-structure –
Вы не можете пройти дерево, используя только tailrecursion, если вы не хотите вручную поддерживать стек. – Bergi
Как бы вы пишете его с помощью петель? Сначала попробуйте это, затем преобразуйте цикл в функцию tailrecursive. – Bergi