この解答例は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の高さを求めます。