python打印一棵二叉树图形

为了便于刷leetcode测试自己写的函数,真实观察经过一些操作后树的变化,

写了以下几个函数:

  • FUN1 由数组创建一棵树
  • FUN2.3 层次遍历一棵树,以数组的形式返回遍历结果(完全二叉树,空结点-1补全), 用于绘制图形
  • FUN3 一棵树的最大深度
  • FUN4 打印一棵二叉树图形
# tree.py"""二叉树数据结构"""class TreeNode:def __init__(self, val=-1):self.val = valself.left = Noneself.right = None"""FUN1 由数组 创建一棵树"""def tree_create(arr, index: int):tnode = Noneif index < len(arr):if arr[index] == null:returntnode = TreeNode(arr[index])tnode.left = tree_create(arr, index * 2 + 1)tnode.right = tree_create(arr, index * 2 + 2)return tnode"""FUN2.3 层次遍历一棵树,以数组的形式返回遍历结果(与原树高度相同的完全二叉树,空结点-1补全), 用于绘制图形"""def tree_level_complete_binary_tree(root):if root is None:returndepth = tree_depth(root)tree_graph = []queue = [root]while queue:node = queue.pop(0)tree_graph.append(node.val)if node.left:queue.append(node.left)else:queue.append(TreeNode())if node.right:queue.append(node.right)else:queue.append(TreeNode())tag = True  # 全是nullfor q in queue:if q.val != -1:tag = Falseif tag:  # 全是nullbreakfor i in range(len(tree_graph), 2 ** depth - 1):tree_graph.append(-1)return tree_graph"""FUN3 求一棵树的最大深度"""def tree_depth(root) -> int:if root is None:return 0else:return max(tree_depth(root.left), tree_depth(root.right)) + 1"""FUN4 打印一棵二叉树图形"""def tree_print_graph(root):depth = tree_depth(root)tree_graph = tree_level_complete_binary_tree(root)print(tree_graph)nodes_val = [[] for i in range(depth)]  # 记录每一层的结点graph = ["" for i in range(depth)]# 排列好结点的位置for i in range(depth):nodes_val[i] = tree_graph[2 ** i - 1: 2 ** (i + 1) - 1]# print(nodes_val)for j in range(len(nodes_val[i])):if nodes_val[i][j] == -1:nodes_val[i][j] = " "graph[i] += str(nodes_val[i][j]) + (" " * (2 ** (depth - i + 1) - 1))  # 添加结点之间的间隔,最底层间隔3个“ ”# print(graph[i])graph[i] = (" " * ((2 ** (depth - i)) - 2)) + graph[i]  # 错开位置,构成树的形状,# print(graph[i])# print("###################################################################")for s in graph:print(s)

 对以上函数测试:

# testTree.pyfrom tree import *arr = ['a', 'b', 'c', 'd', null, 'f', 'g', 'h', 'i', null, null, 'l', 'm']
# arr = [0, 1, 2, null, 4, 5, 6, null, null, 9]
# arr = [0, 1, 2, 3, 4, 5, 6]
# arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
# arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']print('\n' + "FUN1 由数组创建一棵树")
root = tree_create(arr, 0)print('\n' + "FUN2.3 层次遍历一棵树,以数组的形式返回遍历结果(完全二叉树,空结点-1补全), 用于绘制图形")
print(tree_level_complete_binary_tree(root))print('\n' + "FUN3 一棵树的最大深度")
print("二叉树的最大深度:", tree_depth(root))print('\n' + "FUN4 打印一棵二叉树图形")
tree_print_graph(root)

运行结果:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部