如何比较树状结构所有下级是否相同?

新手上路,请多包涵

比如我要用一个name字段 比较树状结构里面的所有name字段 包括所有children 看有没有相同的 不知道树状结构里面有多少级 怎么比较, 并且如果过滤掉自己

阅读 1.2k
1 个回答

用递归你可以看看这个例子:

const tree = {
  name: "A",
  children: [
    {
      name: "B",
      children: [
        { name: "D" },
        { name: "E" },
      ],
    },
    { name: "C" },
  ],
};

function hasDuplicateName(tree, parentNode = null) {
  const nameSet = new Set();

  function traverse(node) {
    if (parentNode && node === parentNode) return false;

    if (nameSet.has(node.name)) {
      return true;
    }

    nameSet.add(node.name);

    if (node.children) {
      for (const child of node.children) {
        if (traverse(child)) {
          return true;
        }
      }
    }

    return false;
  }

  return traverse(tree);
}

console.log(hasDuplicateName(tree)); // 输出 false

// 加一个重复的名字
tree.children[1].children = [{ name: "B" }];
console.log(hasDuplicateName(tree)); // 输出 true
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题