class Node(object):
def __init__(self, item):
self.item = item
self.lchild = None
self.rchild = None
class DoubleTree(object):
def __init__(self, node=None):
self.node = node
def add(self, item):
new_node = Node(item)
if self.node is None:
self.node = new_node
return
lst = list()
lst.append(self.node)
while lst:
node = lst.pop(0)
if node.lchild is None:
node.lchild = new_node
return
elif node.rchild is None:
node.rchild = new_node
return
else:
lst.append(node.lchild)
lst.append(node.rchild)
def bianli(self):
if self.node is None:
print('')
return
lst = list()
lst.append(self.node)
while lst:
node = lst.pop(0)
print(node.item, end=' ')
if node.lchild is not None:
lst.append(node.lchild)
if node.rchild is not None:
lst.append(node.rchild)
def prev_bianli(self, root):
if root is None:
return
print(root.item)
self.prev_bianli(root.lchild)
self.prev_bianli(root.rchild)
# 深度优先遍历, 递归实现
def depth_tree(self, root):
if root is not None:
print(root.item)
if root.lchild is not None:
return self.depth_tree(root.lchild)
if root.rchild is not None:
return self.depth_tree(root.rchild)
# 广度优先遍历, 队列实现
def breadth_tree(self, root):
if root is None:
return
tree_list = list()
tree_list.append(root)
while tree_list:
root = tree_list.pop(0)
print(root.item)
if root.lchild is not None:
tree_list.append(root.lchild)
if root.rchild is not None:
tree_list.append(root.rchild)
obj = DoubleTree()
obj.add(0)
obj.add(1)
obj.add(2)
obj.add(3)
obj.add(4)
obj.add(5)
obj.add(6)
obj.bianli()
obj.prev_bianli(obj.node)