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

python模拟二叉树及各种遍历

收获:

在二叉树添加元素(构造的完全二叉树)和广度优先遍历的时候采用队列的思想;

在深度优先遍历中采用递归,突然意识到递归就很像栈的思想。

测试代码构造的二叉树:

# 二叉树 # 结点类 class Node(): def __init__(self,item): self.item = item self.left = None self.right = None # 二叉树类 class BinaryTree(): def __init__(self,node=None): self.root = node # 添加结点 def add(self,item): new_node = Node(item) if self.root is None: self.root = new_node else: queue = [] queue.append(self.root) while len(queue) != 0: cur = queue.pop(0) if cur.left is None: cur.left = new_node break else: queue.append(cur.left) if cur.right is None: cur.right = new_node break else: queue.append(cur.right) # 广度优先遍历 def breadth(self): if self.root is None: return queue = [] queue.append(self.root) while len(queue): cur = queue.pop(0) print(cur.item,end=' ') if cur.left is not None: queue.append(cur.left) #print(queue[0].item) if cur.right is not None: queue.append(cur.right) #深度优先遍历之 先序遍历 def preOrder(self,root): if root is None: return cur = root print(cur.item,end=' ') if cur.left is not None: self.preOrder(cur.left) if cur.right is not None: self.preOrder(cur.right) #深度优先遍历之 中序遍历 def midOrder(self,root): if root is None: return cur = root if cur.left is not None: self.midOrder(cur.left) print(cur.item,end=' ') if cur.right is not None: self.midOrder(cur.right) #深度优先遍历之 后序遍历 def postOrder(self,root): if root is None: return cur = root if cur.left is not None: self.postOrder(cur.left) if cur.right is not None: self.postOrder(cur.right) print(cur.item, end=' ') # 测试 if __name__ == '__main__': bt = BinaryTree() bt.add('A') bt.add('B') bt.add('C') bt.add('D') bt.add('E') bt.add('F') bt.add('G') bt.add('H') print('广度优先遍历:', end=' ') bt.breadth() print('\n深度优先遍历--先序:',end=' ') bt.preOrder(bt.root) print('\n深度优先遍历--中序:', end=' ') bt.midOrder(bt.root) print('\n深度优先遍历--后序:', end=' ') bt.postOrder(bt.root)

运行结果:

http://www.cnnetsun.cn/news/1836108.html

相关文章:

  • Altium Designer元件库管理避坑指南:为什么你的GND引脚总报ERC错误?
  • GPT-4o实战指南:如何用它解决内容创作与代码开发的真实痛点
  • ComfyUI面部修复FaceDetailer参数调优实战
  • 基于模型强化学习的离网微电网终身控制Python源代码及性能评估
  • 03华夏之光永存:黄大年茶思屋难题揭榜第4题·总结篇
  • 3步完整掌握:WeChatExporter微信聊天记录导出与永久保存实战指南
  • 爱毕业aibiye的智能系统能够将重复率30%的论文自动优化,利用深度学习与语言模型增强文本原创性
  • 【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---命令解析和工具映射酥
  • ST7701和ST7701S区别
  • AI Agent Harness Engineering 技术白皮书解读:核心概念与技术架构全景图
  • RYLR LoRa模块AT指令轻量级C++封装库
  • ESP32 VGA驱动实战:硬件时序+DMA+双缓冲图形开发
  • SAP ABAP开发实战:手把手教你用XML替换法实现Word文档的动态填充与打印
  • ESP8266轻量级Homie物联网框架封装库
  • 需求管理中的用户故事与用例结合方法
  • AHT20温湿度传感器驱动库深度解析与跨平台移植
  • OBS多路推流插件窗口消失?三步快速找回+终极预防指南
  • Vivado IP核管理指南:xci vs xcix,哪种方式更适合你的项目?
  • 阿里231滑块参数n逆向实战:从环境监测到轨迹模拟的完整解析
  • BouncyCastle SM2/SM3/SM4
  • matlab代码:储能参与电能量—辅助服务调频市场联合出清代码。 本代码是电力市场出清的一个重要方向
  • Maxim传感器集线器通信库:跨平台C驱动与协议解析
  • 【仅限Q2释放】大模型成本健康度诊断矩阵(2026版):含17项KPI阈值、5类风险等级判定及自动修复建议
  • YOLO-Master 与 YOLO 开始畏
  • 探索tanx的3次方不定积分的两种解法:从基础到技巧
  • AI原生软件如何重构Scrum?:基于17家头部科技企业实证的4步渐进式适配框架
  • Jeager-One:面向Antares平台的ESP32多模通信SDK
  • ESP8266嵌入式Web配置框架:零代码运行时配置方案
  • 二分查找力扣题(leetcode)抖
  • 保姆级教程:用Node.js和Coturn搞定peerStream公网部署,让Unreal PixelStreaming跑起来