二叉树遍历算法详解:前序、中序、后序与层序遍历
创作时间:
作者:
@小白创作中心
二叉树遍历算法详解:前序、中序、后序与层序遍历
引用
CSDN
1.
https://blog.csdn.net/qq_41768644/article/details/141652061
二叉树遍历是数据结构与算法中的基础且重要的一环,掌握二叉树的前序、中序、后序和层序遍历方法,不仅能帮助理解二叉树的结构特性,也是解决许多算法问题的关键。本文将通过实例代码和详细解析,带你全面掌握二叉树的各种遍历方式。
一、二叉树创建
首先,我们定义一个二叉树节点类TreeNode
,并创建一个示例二叉树:
class TreeNode:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def createTree():
treeRoot = TreeNode('F')
NodeB = TreeNode('B')
NodeG = TreeNode('G')
treeRoot.left = NodeB
treeRoot.right = NodeG
NodeA = TreeNode('A')
NodeD = TreeNode('D')
NodeB.left = NodeA
NodeB.right = NodeD
NodeC = TreeNode('C')
NodeE = TreeNode('E')
NodeD.left = TreeNode('C')
NodeD.right = TreeNode('E')
NodeI = TreeNode('I')
NodeH = TreeNode('H')
NodeG.right = NodeI
NodeI.left = NodeH
return treeRoot
二、遍历算法详解
1. DLR 前序遍历(根,左,右)
前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。递归实现如下:
def preOrder(treeRoot):
print(treeRoot.data, end=" ")
if treeRoot.left is not None:
preOrder(treeRoot.left)
if treeRoot.right is not None:
preOrder(treeRoot.right)
2. LDR 中序遍历(左、根、右)
中序遍历首先遍历左子树,然后访问根节点,最后遍历右子树。递归实现如下:
def inOrder(treeRoot):
if treeRoot.left is not None:
inOrder(treeRoot.left)
print(treeRoot.data, end=" ")
if treeRoot.right is not None:
inOrder(treeRoot.right)
3. LRD 后序遍历(左,右,根)
后序遍历首先遍历左子树,然后遍历右子树,最后访问根节点。递归实现如下:
def postOrder(treeRoot):
if treeRoot.left is not None:
postOrder(treeRoot.left)
if treeRoot.right is not None:
postOrder(treeRoot.right)
print(treeRoot.data, end=" ")
4. 层序遍历
层序遍历从根节点开始,逐层从左到右访问节点,使用队列实现:
def levelOrder(treeRoot):
q = []
q.append(treeRoot)
while len(q) != 0:
node = q.pop(0)
print(node.data, end=" ")
if node.left is not None:
q.append(node.left)
if node.right is not None:
q.append(node.right)
三、执行结果
if __name__ == '__main__':
treeRoot = createTree()
preOrder(treeRoot)
print("\n############################")
inOrder(treeRoot)
print("\n############################")
postOrder(treeRoot)
print("\n############################")
levelOrder(treeRoot)
输出结果:
F B A D C E G I H
############################
A B C D E F G H I
############################
A C E D B H I G F
############################
F B G A D I C E H
四、复杂度分析
1. 前序遍历、中序遍历、后序遍历
- 时间复杂度:O(n),每个节点访问一次
- 空间复杂度:O(n),递归栈深度最大为n
2. 层序遍历
- 时间复杂度:O(n),每个节点访问一次
- 空间复杂度:O(n),队列中最多同时存储n/2个节点
热门推荐
2025年2月南通市区新房市场回暖,库存压力依然存在
怎样选择合适的疫苗接种机构?
不想骨质疏松,维护血管弹性,在家这样做
网页设计的原则与要求
治疗三高的中成药有哪些
如何避免高热量饮料的摄入
千万不要买百万医疗险?百万医疗险的优势和劣势
舞榭歌台,小桥流水:剖析宋代兴起和繁荣的中国古代园林艺术
Diosna湿法制粒技术—如何优化制粒工艺
污水处理项目案例与成功经验分享
轮胎原材料的选择标准是什么?不同原材料对轮胎性能有何影响?
全球公认的十佳战争电影,部部生猛惨烈,看完让人陷入沉思
租约到期租户赖着不走怎么办
电脑显示屏怎么擦
求职时如何大胆谈钱,科学避坑?
姜的功效与作用详解 | 生姜种植保存全攻略
怀姜和生姜的区别
油价飙升,是选经济实惠的油车还是环保节能的电车?
活髓切断术和根管治疗哪个好?有什么区别呢?
如何提升个人收入,实现财务自由的秘诀
我国生物多样性保护取得积极成效
安全高效:8个必知跑步机锻炼技巧
甘肃美食地图揭秘:除了麻辣烫,还有这些特色美食等你打卡
三国荣誉体系下的诸葛亮、张飞与关羽
浦东川沙新镇:四大核心理念引领高质量发展
杭州跨境电商人才工作座谈会在知识服务中心举行
学会休息,才能走得更远
2024年全国硕士研究生招生调查报告发布!
老年人运动强度指南
世界各国年假对比:从法国30天到美国0天,你最羡慕哪个国家?