Python3树结构实现_第1页
Python3树结构实现_第2页
Python3树结构实现_第3页
Python3树结构实现_第4页
Python3树结构实现_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Python 3 tree implementationSource:# Python 3 Tree Implementation# Copyright (C) 2011, Brett Alistair Kromkamp - # All rights reserved.# Redistribution and use in source and binary forms, with or without modification,# are permitted provided that the following conditions are me

2、t:# Redistributions of source code must retain the above copyright notice, this list# of conditions and the following disclaimer.# Redistributions in binary form must reproduce the above copyright notice, this# list of conditions and the following disclaimer in the documentation and/or# other materi

3、als provided with the distribution.# Neither the name of the copyright holder nor the names of the contributors# may be used to endorse or promote products derived from this software without# specific prior written permission.# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS I

4、S AND# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CON

5、SEQUENTIAL DAMAGES# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN AN

6、Y WAY OUT OF THE USE OF THIS# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.import unittestdef sanitize_id(id): return id.strip().replace( , )#-# Test suiteclass TestUtilities(unittest.TestCase): def setUp(self): self.identifier1 = i denti fier 1 def test_sanitize_id(self): self.assert

7、Equal(sanitize_id(self.identifier1), identifier1) def tearDown(self): pass#-# Module testingif _name_ = _main_: unittest.main()#=import unittestimport uuidfrom utilities import sanitize_id# Module constants(_ADD, _DELETE, _INSERT) = range(3)class Node: Class for basic node functionality. def _init_(

8、self, name, identifier=None, expanded=True): self._identifier = (str(uuid.uuid1() if identifier is None else sanitize_id(str(identifier) = name self.expanded = expanded self._bpointer = None self._fpointer = property def identifier(self): return self._identifier property def bpointer(self)

9、: return self._bpointer bpointer.setter def bpointer(self, value): if value is not None: self._bpointer = sanitize_id(value) property def fpointer(self): return self._fpointer def update_fpointer(self, identifier, mode=_ADD): if mode is _ADD: self._fpointer.append(sanitize_id(identifier) elif mode i

10、s _DELETE: self._fpointer.remove(sanitize_id(identifier) elif mode is _INSERT: self._fpointer = sanitize_id(identifier)#-# Test suiteclass TestNode(unittest.TestCase): def setUp(self): self.node1 = Node(Test One, ide ntifier 1 ) def test_initialization(self): self.assertEqual(, Test O

11、ne) self.assertEqual(self.node1.identifier, identifier1) self.assertEqual(self.node1.expanded, True) def test_set_fpointer(self): self.node1.update_fpointer( identi fier 2) self.assertEqual(self.node1.fpointer, identifier2) def test_set_bpointer(self): self.node1.bpointer = identi fier 1 self.assert

12、Equal(self.node1.bpointer, identifier1) def tearDown(self): pass#-# Module testingif _name_ = _main_: unittest.main()#=import unittestfrom node import Node# Module constants(_ADD, _DELETE, _INSERT) = range(3)(_ROOT, _DEPTH, _WIDTH) = range(3)class Tree: def _init_(self): self.nodes = def get_index(s

13、elf, position): for index, node in enumerate(self.nodes): if node.identifier = position: break return index def create_node(self, name, identifier=None, parent=None): Create a child node for the node indicated by the parent parameter node = Node(name, identifier) self.nodes.append(node) self._update

14、_fpointer(parent, node.identifier, _ADD) node.bpointer = parent return node def move_node(self, source, destination): Move a node indicated by the source parameter to the parent node indicated by the dest parameter pass def remove_node(self, identifier): pass def show(self, position, level=_ROOT): q

15、ueue = selfposition.fpointer if level = _ROOT: print(0 1.format(, selfposition.identifier) else: print(t*level, 0 1.format(, selfposition.identifier) if selfposition.expanded: level += 1 for element in queue: self.show(element, level) # recursive call def expand_tre

16、e(self, position, mode=_DEPTH): # Python generator. Loosly based on an algorithm from Essential LISP by # John R. Anderson, Albert T. Corbett, and Brian J. Reiser, page 239-241 yield position queue = selfposition.fpointer while queue: yield queue0 expansion = selfqueue0.fpointer if mode is _DEPTH: q

17、ueue = expansion + queue1: # depth-first elif mode is _WIDTH: queue = queue1: + expansion # width-first def is_branch(self, position): return selfposition.fpointer def _update_fpointer(self, position, identifier, mode): if position is None: return else: selfposition.update_fpointer(identifier, mode)

18、 def _update_bpointer(self, position, identifier): selfposition.bpointer = identifier def _getitem_(self, key): return self.nodesself.get_index(key) def _setitem_(self, key, item): self.nodesself.get_index(key) = item def _len_(self): return len(self.nodes) def _contains_(self, identifier): return n

19、ode.identifier for node in self.nodes if node.identifier is identifier#-# Test suiteclass TestTree(unittest.TestCase): def setUp(self): pass def test_initialization(self): pass def tearDown(self): pass#-# Module testingif _name_ = _main_: # Example usage tree = Tree() tree.create_node(Harry, harry) # root node tree.create_node(Jane, jane, parent = harry) tree.create_node(Bill, bill, parent = harry) tree.create_node(Joe, joe, parent = jane) tree.create_no

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论