この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
58. DOM treeの高さを返す
再起を使って解く場合:
function getDomTreeHeight(node) { if (!node || !node.childNodes) { // nodeがnullか、childNodesがない場合(ノードがテキストノードなど) return 0; } else { let maxChildHeight = 0; for (let child of node.childNodes) { if (child.nodeType === Node.ELEMENT_NODE) { // ELEMENT_NODEの場合のみ再帰的に子ノードを探索 let childHeight = getDomTreeHeight(child); if (childHeight > maxChildHeight) { maxChildHeight = childHeight; } } } return maxChildHeight + 1; // 子ノードの高さの最大値 + 1(自分自身の高さ) }}
再起を使わない場合:
function getDomTreeHeight(node) { let height = 0; let stack = [{node: node, depth: 1}]; while (stack.length > 0) { let current = stack.pop(); let currentNode = current.node; let currentDepth = current.depth; if (currentNode.nodeType === Node.ELEMENT_NODE) { height = Math.max(height, currentDepth); for (let child of currentNode.childNodes) { stack.push({node: child, depth: currentDepth + 1}); } } } return height;}
どちらの解法でも、与えられたnodeがnullまたはテキストノードなどの場合は高さ0を返します。再起を使う場合は、childNodesがない場合も同様に高さ0を返します。それ以外の場合は、子ノードの高さの最大値に+1した値を返します。スタックを使う場合は、配列の最後尾から取り出したノードをチェックします。ノードがELEMENT_NODEである場合は、その高さを更新し、子ノードをスタックに追加します。スタックが空になるまでこの処理を繰り返すことで、DOM treeの高さを求めます。