博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Clone Graph(python)
阅读量:4068 次
发布时间:2019-05-25

本文共 1524 字,大约阅读时间需要 5 分钟。

类似于二叉树的三种遍历,我们可以基于遍历的模板做很多额外的事情,图的两种遍历,深度和广度模板同样也可以做很多额外的事情,这里举例利用深度优先遍历的模板来进行复制,深度优先中,我们先访问第一个结点,接着访问第一个邻接点,再访问邻节点的邻节点。。。。

class Solution:    # @param node, a undirected graph node    # @return a undirected graph node    def cloneGraph(self, node):        if None == node: return None        nodeMap = {}        return self.cloneNode(node, nodeMap)            def cloneNode(self, node, nodeMap):        if None == node:            return None        #访问当前点,这里不是简单的print,而是复制,若已经复制,则返回副本        if nodeMap.has_key(node):            return nodeMap[node]        #若没有副本,则复制一份,同样处理其邻接点        else:            clone = UndirectedGraphNode(node.label)            nodeMap[node] = clone            #访问其邻居节点            for neighbor in node.neighbors:                clone.neighbors.append(self.cloneNode(neighbor, nodeMap))        return clone
与这个题类似,

Copy List with Random Pointer

  这个题目中如果允许使用额外的空间,我们也可以用这种办法来获得一份拷贝。

class Solution:    # @param head, a RandomListNode    # @return a RandomListNode    def copyRandomList(self, head):        if None == head: return None        nodeMap = {}        return self.copyListNode(head, nodeMap)            def copyListNode(self, node, nodeMap):        if None == node: return None        if nodeMap.has_key(node):            return nodeMap[node]        else:             cpNode = RandomListNode(node.label)            nodeMap[node] = cpNode            cpNode.next = self.copyListNode(node.next, nodeMap)            cpNode.random = self.copyListNode(node.random, nodeMap)        return cpNode

转载地址:http://oumji.baihongyu.com/

你可能感兴趣的文章
openstack 与 ceph (架构)
查看>>
openstack 与 ceph (monitor初始化)
查看>>
openstack 与 ceph (osd 部署)
查看>>
openstack 管理三十八 - ceph 与 crushmap
查看>>
mysql 插入/更新的简单方法
查看>>
osd 故障测试
查看>>
openstack 管理 三十七 - 创建 vm 并 指定IP 地址
查看>>
利用数据库自定义并发 bunket 功能
查看>>
ceph OSD 故障记录
查看>>
ceph osd 更换硬盘记录
查看>>
logstash 常见解决方法
查看>>
ceph 故障分析(backfill_toofull)
查看>>
ceph 故障解决备忘
查看>>
更改 ceph journal 位置
查看>>
docker private registry using rados beckend
查看>>
使用 docker 后出现的网络异常现象
查看>>
ceph ( requests are blocked ) 异常解决方法
查看>>
ceph 报警 [ low disk space] 解决
查看>>
python 调用 lvs 脚本 [备忘]
查看>>
openstack 命令行管理二十一 - 云盘管理 (备忘)
查看>>