代码:
# 定义一个普通的树类
class Tree:
def __init__(self, data):
self.data = data
self.children = []
def get(self):
return self.data
def set(self):
return self.data
def addChild(self, child):
self.children.append(child)
def getChildren(self):
return self.children
# 初始化一个树
tree = Tree(0)
# 添加三个子节点
tree.addChild(Tree(1))
tree.addChild(Tree(2))
tree.addChild(Tree(3))
children = tree.getChildren()
# 每个子节点添加两个子节点
children[0].addChild(Tree(4))
children[0].addChild(Tree(5))
children[1].addChild(Tree(6))
children[1].addChild(Tree(7))
children[2].addChild(Tree(8))
children[2].addChild(Tree(9))
result=[]
# 递归方式实现深度优先遍历
def depthFirstByRecursion(tree):
# global result
result.append(tree.data)
print(result)
children = tree.getChildren()
for c in children:
depthFirstByRecursion(c)
# return result
depthFirstByRecursion(tree)
print(result)
# 递归方式实现广度优先遍历
def breadthFirstByRecursion(gen, index=0, nextGen=[], result=[]):
if type(gen) == Tree: # 表示根节点
gen = [gen]
result.append(gen[index].data) # 取出当前节点的值
children = gen[index].getChildren()
nextGen += children # 统计所有下一代节点
if index == len(gen)-1: # 横向上没有其他节点,即到达最右侧节点
if nextGen == []: # 表示没有子节点
return
else: # 更新至下一代
gen = nextGen
nextGen = []
index = 0
else:
index += 1 # 本层节点向右移动一个
breadthFirstByRecursion(gen, index, nextGen,result)
return result
print(breadthFirstByRecursion(tree))