尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

python —— 树的遍历 —— 深度优先遍历(先序、中序、后序) —— 非递归方式(使用栈数据结构进行辅助)

python —— 树的遍历 —— 深度优先遍历(先序、中序、后序) ——  非递归方式(使用栈数据结构进行辅助)
📅 发布时间:2026/6/20 6:34:26

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]root_node = node_list[0]def preorder_traversal(root):if root is None:return None # return [root.val] + preorder_traversal(root.left) + preorder_traversal(root.right)print(root.val)preorder_traversal(root.left)preorder_traversal(root.right)def midorder_traversal(root):if root is None:return None # return [root.val] + preorder_traversal(root.left) + preorder_traversal(root.right)midorder_traversal(root.left)print(root.val)midorder_traversal(root.right)def postorder_traversal(root):if root is None:return None # return [root.val] + preorder_traversal(root.left) + preorder_traversal(root.right)postorder_traversal(root.left)postorder_traversal(root.right)print(root.val)# preorder_traversal(root_node)
# midorder_traversal(root_node)
# postorder_traversal(root_node)preorder_traversal(root_node)print("---------------------")stack = [root_node, ]while stack:node = stack.pop()print(node.val)if node.right is not None:stack.append(node.right)if node.left is not None:stack.append(node.left)print("---------------------")node = root_nodewhile True:print(node.val)if node.right is not None:stack.append(node.right)if node.left is not None:# stack.append(node.left)node = node.leftelse:if stack:node = stack.pop()else:break



运行效果:

image





本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注处,如有侵权请与博主联系。 如果未特殊标注则为原创,遵循 CC 4.0 BY-SA 版权协议。

相关新闻

  • IntelliJ IDEA 最常用的快捷键
  • C++ 循环结构:控制程序重复执行的核心机制 - 教程
  • python —— 满二叉树的广度优先遍历

最新新闻

  • 开柴油皮卡的终于找到了对口粮:戴文CH-4柴油机油实测不拉胯 - 技术实力派
  • FastAPI项目测试覆盖率精准配置:pytest-cov与.coveragerc实战指南
  • 2026年6月劳力士官方售后维修服务中心|全国官方统一咨询电话,各门店详细地址查询 - 速递信息
  • 量化与应对AI绘画文化偏见:从评估到VAOP策略实践
  • 踩坑预警!沙坪坝教资考生择校查看真实学员评价 - 晚香时候
  • 道路运输许可证丢了登报怎么线上办理?正规办理渠道与流程 - 速递信息

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号