@
NewConn , #7
是这样的,所以我贴在 1#楼的代码有问题啊。
不过 30s 有点难以想象,你的代码有几层循环啊?
根据你说的「原始数据不多」,可以考虑用空间换时间,比如要判断「子树的所有节点都不属于 type 」,可以为每个节点都保存一个用于判断「是否包含某个 type 」的数组:
type Node = {
...
children: Node[];
hasChildOfType : boolean[COUNT_OF_TYPES]; //NUM_OF_TYPES 是所有 type 的数量
};
然后给所有级别的父节点添加对应的标记:
all_nodes.forEach( node => {
node.hasChildOfType[node.type]=true;
node.parent.hasChildOfType[node.type]=true;
node.parent.parent.hasChildOfType[node.type]=true;
...
});
这样裁剪的时候再判断就省时间了。