// 获取所有的叶子节点
export const getLeafNodes = (tree) => {
  const leafNodes = []
  function traverse(node) {
    if (!node.children || node.children.length === 0) {
      leafNodes.push(node)
    } else {
      for (let child of node.children) {
        traverse(child)
      }
    }
  }
  // 开始遍历
  if (!tree?.length) return []
  for (let rootNode of tree) {
    traverse(rootNode)
  }
  return leafNodes
}

// 获取所有二级节点
export const getSecondNodes = (tree) => {
  let nodes = []
  for (const rootNode of tree) {
    if (rootNode.children?.length) nodes = [...nodes, ...rootNode.children]
  }
  return nodes
}

// 找到数组中第一对重复的元素并返回元素及元素在原数组的下标
export const findFirstDuplicateWithIndices = (arr) => {
  const elementIndices = new Map();
  for (let i = 0; i < arr.length; i++) {
    const element = arr[i];
    if (elementIndices.has(element)) {
      // 如果元素已经在 elementIndices 中，返回元素和它的两个下标
      return {
        element: element,
        firstIndex: elementIndices.get(element),
        secondIndex: i
      };
    } else {
      // 如果元素不在 elementIndices 中，存储它的下标
      elementIndices.set(element, i);
    }
  }
  // 如果没有找到重复元素，返回 null 或其他表示未找到的值
  return null;
}