当前位置: 首页 > news >正文

python —— 满二叉树的广度优先遍历

python —— 满二叉树的广度优先遍历

代码:

# 2**n - 1  # 全二叉树
# n=4 2**4 - 1 = 15
import random
node_v = [2,3,5,7,11,0,17,19,23,0,0,0,0,41,43]
# node_v = list(range(0, 15))
# random.shuffle(node_v)
# print(node_v) # [14, 4, 12, 0, 1, 13, 9, 11, 3, 5, 6, 10, 2, 7, 8]# [0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14]
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = right 
node_list = [TreeNode(i) for i in node_v] # 初始化生成所有节点
node_list[5], node_list[9], node_list[10], node_list[11], node_list[12] = None, None, None, None, None
print(node_list)for i in range(len(node_list)):           # 将父节点与左右节点进行连接node = node_list[i]  # TreeNode对象if 2*i+1 < len(node_list):if node != None:node.left = node_list[2*i+1]  # node.left == Noneif 2*i+2 < len(node_list):if node != None:node.right = node_list[2*i+2]"""
i = int(input("输入父节点索引号"))
f_node = node_list[i]
left_node = f_node.left
right_node = f_node.right
print(f"父节点:{f_node.val}")
print(f"左子节点:{left_node.val if left_node else None}")
print(f"右子节点:{right_node.val if right_node else None}")
"""root_node = node_list[0]
# 广度优先, 从根节点开始,按层遍历所有节点
temp_list = [root_node, ]
while temp_list:node = temp_list.pop(0)print(node.val)if node.left:temp_list.append(node.left)if node.right:temp_list.append(node.right)



运行效果:

image