Lintas kanak-kanak secara rekursif, mengikut urutan dari bawah ke atas, kiri ke kanan
function listNode (node) {
if (!(node instanceof Node)) {
throw new TypeError("parameter 1 is not of type 'Node'")
}
return Array.from(node.childNodes || [])
.reduce((cList, cNode) => cList.concat(listNode(cNode)), [])
.concat([node])
}
Nota: Susunan dari bawah ke atas dan kiri ke kanan tidak semestinya yang paling dalam berada di hadapan. Anda boleh menggunakan traversal berjujukan lapisan untuk merakam secara terbalik:
function listNode (rootNode) {
if (!(rootNode instanceof Node)) {
throw new TypeError("parameter 1 is not of type 'Node'")
}
var queue = [rootNode, null]
var levelNodes = []
var result = []
while (queue.length > 1) {
var node = queue.shift()
if (node === null) {
queue.push(null)
result = levelNodes.concat(result)
levelNodes = []
continue
}
levelNodes.push(node)
if (node.hasChildNodes()) {
queue = queue.concat(Array.from(node.childNodes))
}
}
if (levelNodes.length > 0) {
result = levelNodes.concat(result)
}
return result
}
Lintas kanak-kanak secara rekursif, mengikut urutan dari bawah ke atas, kiri ke kanan
Nota: Susunan dari bawah ke atas dan kiri ke kanan tidak semestinya yang paling dalam berada di hadapan. Anda boleh menggunakan traversal berjujukan lapisan untuk merakam secara terbalik: