LeetCode 133图深拷贝代码本地正常但提交报错求助
排查LeetCode 133题Clone Graph提交错误:"You must return a copy of all the nodes in the original graph"
以下是几种常见错误原因及解决思路:
遗漏原图部分节点的克隆
若使用DFS/BFS遍历,可能存在遍历逻辑缺陷:比如终止条件错误导致未覆盖所有连通节点,或是处理邻居时跳过了部分节点。要确保遍历能触达原图的每一个节点,且每个原节点都对应创建克隆节点。克隆节点的邻居指向原节点
本地只验证了克隆节点地址不同,但可能部分邻居仍指向原节点而非对应的克隆节点。必须用哈希表(如unordered_map<Node*, Node*>)记录原节点到克隆节点的映射,处理邻居时从哈希表中取出对应克隆节点加入列表,而非直接复制原节点的邻居指针。哈希表使用逻辑错误
正确的流程是:遇到节点先检查哈希表,若已存在克隆节点则直接返回;若不存在则先创建克隆节点存入哈希表,再递归处理邻居。如果颠倒顺序(先处理邻居再存哈希表),会导致重复创建节点或遗漏映射,最终出现未完全克隆的情况。边界情况未处理
比如原节点为nullptr时需直接返回nullptr;单个无邻居的节点,克隆后要确保其邻居列表为空,而非复用原节点的邻居列表。
正确实现示例(C++)
class Solution { private: unordered_map<Node*, Node*> nodeMap; public: Node* cloneGraph(Node* node) { if (!node) return nullptr; if (nodeMap.count(node)) { return nodeMap[node]; } Node* clone = new Node(node->val); nodeMap[node] = clone; for (Node* n : node->neighbors) { clone->neighbors.push_back(cloneGraph(n)); } return clone; } };
内容的提问来源于stack exchange,提问作者Priyanshu Sahani
相关产品推荐
相关产品推荐

