新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2011-11-7
- 最后登录
- 1970-1-1
|
- # -*- coding: utf-8 -*-
- """
- 烙印Engineer不记得什么岗位了,问题是一个雇员和经理的列表
- emp mag
- 1 -. 1point 3acres 璁哄潧
- 2 1
- 3 1
- 4 2
- 5 4
- 那么1就是ceo,因为没有manager
- 然后打印结果
- 1
- -2
- --4
- ---5
- -3
- """
- from collections import defaultdict
- class OrgChart(object):
- def __init__(self, relations):
- self.graph = defaultdict(list)
- self.ceo = None
- for ee, manager in relations:
- self.graph[manager].append(ee)
- if manager is None:
- self.ceo = ee
- def get_org_chart(self):
- self._ret = []
- self._pre_order(self.ceo, 0)
- return self._ret
- def print_org_chart(self):
- chart = self.get_org_chart()
- lines = []
- for level, ee in chart:
- lines.append('-' * level + str(ee))
- st = '\n'.join(lines)
- print st
- def _pre_order(self, node, level):
- if node:
- self._ret.append((level, node))
- for child in self.graph[node]:
- self._pre_order(child, level + 1)
复制代码
- import unittest
- from solution import OrgChart
- class Test(unittest.TestCase):
- def test_1(self):
- relations = [
- (1, None),
- (2, 1),
- (3, 1),
- (4, 2),
- (5, 4),
- ]
- org_chart = OrgChart(relations)
- actual = org_chart.get_org_chart()
- print
- org_chart.print_org_chart()
- print actual
- if __name__ == '__main__':
- unittest.main(verbosity=2)
复制代码 |
|