class BinaryTreeNode():
# 二叉树节点
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def generate_tree(arr):
# input:数组
# output:二叉树首节点
if not arr:
return
# 原数组上修改
arr[0] = BinaryTreeNode(arr[0])
for i in range(1, len(arr)):
# print('----arr[i]', i, arr[i])
if arr[i] is not None:
arr[i] = BinaryTreeNode(arr[i])
# print('\t', i & 1, i // 2, arr[i])
# 利用二叉树的节点位置和其左子树右子树位置的关系
# 节点A的位置是n,则左节点是2n,右节点是2n + 1
if i & 1 == 1:
# 奇数:是左节点
arr[(i -1) // 2].left = arr[i]
else:
# 偶数:是右节点
arr[(i -1) // 2].right = arr[i]
return arr[0]
def look_tree(root):
# 遍历打印二叉树
if not root:
return
print("look_tree start")
# 层序遍历
stack = [root]
while stack:
tmp = stack.pop(0)
print("\tlook: ", tmp.val)
if tmp.val is None:
continue
if tmp.left:
stack.append(tmp.left)
if tmp.right:
stack.append(tmp.right)
print("look_tree finish")
look_tree(generate_tree([1,2,5,3,4,None,6]))
python 二叉树
最新推荐文章于 2025-06-17 00:28:39 发布