import queue
class Node:
def __init__(self, value):
self.right = None
self.left = None
# self.key = key
self.value = value
class Tree:
def __init__(self):
self.root = None
self.n = 0
super(Tree, self).__init__()
self.q = queue.Queue()
self.deep = 0
@staticmethod
def traverse(q, nodes):
if len(nodes) == 0:
return
temp_list = []
for i in nodes:
q.put(i)
if i.left is not None:
temp_list.append(i.left)
if i.right is not None:
temp_list.append(i.right)
Tree.traverse(q, temp_list)
def max_depth(self):
self.deep = Tree.max_depth_x(self.root)
return self.deep
@staticmethod
def max_depth_x(node):
if node is None:
return 1
deep_left = 0
deep_right = 0
if node.left is not None:
deep_left = Tree.max_depth_x(node.left)
if node.right is not None:
deep_right = Tree.max_depth_x(node.right)
return (deep_left if deep_right < deep_left else deep_right) + 1
@staticmethod
def origami(n):
node = Node(value="down")
return Tree.origami_x(n, [node])
@staticmethod
def origami_x(n, nodes):
if n == 0:
return
print([node.value for node in nodes])
temp_list = []
for i in nodes:
i.left = Node(value="down")
i.right = Node(value="up")
temp_list.append(i.left)
temp_list.append(i.right)
Tree.origami_x(n-1, temp_list)
return nodes[0]
def __iter__(self):
Tree.traverse(self.q, [self.root])
return self
def __next__(self):
if self.q.empty():
Tree.traverse(self.q, [self.root])
raise StopIteration
else:
return self.q.get()
if __name__ == '__main__':
tree = Tree()
print(tree.max_depth())
print(tree.origami(3))
二叉树折纸问题
最新推荐文章于 2023-11-26 21:26:47 发布