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