|

楼主 |
发表于 2021-8-10 16:34:44
|
显示全部楼层
我从网上查了一个,树结构,但是我主要是不会 给一个初始条件 输出最后就是那个树结构,中间计算各个棋子的状态以及自动递归到下一层不知道怎么套进去
这是那个结构
- class TreeNode(object):
- """树节点类"""
- def __init__(self, name, parent=None):
- super(TreeNode, self).__init__()
- self.name = name
- self.parent = parent
- self.child = {}
- def __repr__(self) :
- return 'TreeNode(%s)' % self.name
- def __contains__(self, item):
- return item in self.child
- def __len__(self):
- """返回子节点长度"""
- return len(self.child)
- def __bool__(self, item):
- """对存在的节点返回true"""
- return True
- def path(self):
- """返回路径字符串(从根节点到当前节点)"""
- if self.parent:
- return '%s %s' % (self.parent.path.strip(), self.name)
- else:
- return self.name
- def get_child(self, name, defval=None):
- """获取当前节点的子节点"""
- return self.child.get(name, defval)
- def add_child(self, name, obj=None):
- """对当前节点增加一个子节点"""
- if obj and not isinstance(obj, TreeNode):
- raise ValueError('TreeNode only add another TreeNode obj as child')
- if obj is None:
- obj = TreeNode(name)
- obj.parent = self
- self.child[name] = obj
- return obj
- def del_child(self, name):
- """从当前节点删除一个子节点"""
- if name in self.child:
- del self.child[name]
- def find_child(self, path, create=False):
- """通过路径或名字找到子节点, 如果没找到返回None"""
- # 如果输入是字符串,将路径转换为列表
- path = path if isinstance(path, list) else path.split() #如果不是则分割为列表
- cur = self
- for sub in path:
- # 搜索
- obj = cur.get_child(sub)
- if obj is None and create:
- #可以增加需要的新节点
- obj = cur.add_child(sub)
- # 检查搜索是否完成
- if obj is None:
- break
- cur = obj
- return obj
- def items(self):
- return self.child.items()
- def dump(self, indent=0):
- """将树转存为字符串,输出树状结构 """
- tab = ' '*(indent-1) + ' |- ' if indent > 0 else ''
- print('%s%s' % (tab, self.name))
- for name, obj in self.items():
- obj.dump(indent+1)
- def preorder(self,tier=0):
- """先序遍历输出"""
- print('%s' % (self.name))
- for name, obj in self.items():
- obj.preorder(tier+1)
- if __name__ == '__main__':
- root = TreeNode('tree') #'tree'
- a1 = root.add_child('a1')
- a1.add_child('b1')
- a1.add_child('b2')
- a1.add_child('b3')
- a1.add_child('b4')
- b3 = a1.add_child('b3')
- b3.add_child('c1')
- b3.add_child('c2')
- c1 = b3.add_child('c1')
- c1.add_child('d1')
- b4 = a1.add_child('b4')
- b4.add_child('c3')
- root.dump()
- root.preorder()
复制代码 |
|