这里主要是用Python实现下深度优先的概念,由于代码写得比较随意,就没有封装成类,而是写成一个函数
用一个列表做为实验数据,模拟成二叉树结构,用递归的方式不断获取二叉树上的左节点,一直到左节点
序号超出列表范围,然后回归获取右节点,以此来实现深度优先。
以下是代码,代码以实现基本概念功能为主,比较简陋,但是易于理解和记忆:
#****************************************************************#
#深度优先函数
#左节点的规律:父节点的两倍 tree_left = i*2
#右节点的规律:父节点的两倍+1 tree_right = i*2 + 1
#设主节点,也就是l[0]为第一个节点,则第一个左节点就是2号节点,以此类推
#用 <= len(l)来控制节点没有超出列表
#递归调用,一直到左节点超出列表长度,,此时表明左节点不存在,开始回归打印右节点
#****************************************************************#
# l = [1,2,9,3,6,10,13,4,5,7,8,11,12,14]
# l = [1, 2, 3, 4, 5, 6, 7, 8]
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]def deep_first(l,i=1):
if i == 1:
print(l[0])
tree_left = i*2
tree_right = i*2 + 1
if tree_left <= len(l):
print(l[tree_left-1])
deep_first(l,tree_left)
if tree_right <= len(l):
print(l[tree_right-1])
deep_first(l,tree_right)
else:
returndeep_first(l)