高级农民
- 积分
- 2600
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2013-3-10
- 最后登录
- 1970-1-1
|
不建树:- class SolutionWithoutTreeConstruction:
- def getLeafMax(self, edges):
- if not edges: return
- leaves = set()
- allNodes = set()
- parentMap = {}
- # construct parentMap and leaf set
- # {10: 5, 15: 5, 5: 8, 6: 8, 7: 6}, set([10, 15, 7])
- for parent, child in edges:
- parentMap[child] = parent
- if parent in leaves:
- leaves.remove(parent)
- if child not in allNodes:
- leaves.add(child)
- allNodes.add(parent)
- allNodes.add(child)
- # Search for each leaf in the leaf set
- for leaf in leaves:
- curMax = leaf
- node = leaf
- while node in parentMap:
- node = parentMap[node]
- curMax = max(node, curMax)
- curMax = max(node, curMax)
- print leaf, curMax
复制代码 建树,然后DFS:- class TreeNode:
- def __init__(self, x):
- self.val = x
- self.children = []
- class Tree:
- def __init__(self):
- self.root = None
- self.possibleRoots = set()
- self.nodes = {}
- def insertEdge(self, parent, child):
- if not self.root:
- parentNode = TreeNode(parent)
- childNode = TreeNode(child)
- self.possibleRoots.add(parentNode)
- parentNode.children.append(childNode)
- self.nodes[parent] = parentNode
- self.nodes[child] = childNode
- else:
- if parent in self.nodes and child in self.nodes:
- self.nodes[parent].children.append(self.nodes[child])
- if self.nodes[child] in self.possibleRoots:
- self.possibleRoots.remove(self.nodes[child])
- elif parent in self.nodes and child not in self.nodes:
- childNode = TreeNode(child)
- self.nodes[child] = childNode
- self.nodes[parent].children.append(childNode)
- elif parent not in self.nodes and child in self.nodes:
- parentNode = TreeNode(parent)
- self.nodes[parent] = parentNode
- self.nodes[parent].children.apped(self.nodes[child])
- if self.nodes[child] in self.possibleRoots:
- self.possibleRoots.remove(self.nodes[child])
- self.possibleRoots.add(self.nodes[parent])
- else:
- parentNode = TreeNode(parent)
- childNode = TreeNode(child)
- self.possibleRoots.add(parentNode)
- parentNode.children.append(childNode)
- self.nodes[parent] = parentNode
- self.nodes[child] = childNode
- if len(self.possibleRoots) == 1:
- self.root = list(self.possibleRoots)[0]
- def getLeafMax(self):
- node = self.root
- self.dfs(node, node.val)
- def dfs(self, node, curMax):
- if not node.children:
- print node.val, curMax
- return
- for child in node.children:
- self.dfs(child, max(curMax, child.val))
复制代码 |
|