二叉树遍历算法详解:前序、中序、后序与层序遍历
创作时间:
作者:
@小白创作中心
二叉树遍历算法详解:前序、中序、后序与层序遍历
引用
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个节点
热门推荐
能够认定为工伤的7种情形
从油车到电车:为什么油门控制突然变难了?
智能建造专业哪个学校最好?附全国排名前50强的大学名单
回火对钢性能的影响及回火温度的作用
低音炮音箱的调节方法有哪些?如何根据不同场景调节低音炮音箱?
The BMJ:替白蛋白紫杉醇、顺铂加卡培他滨显著延长晚期鼻咽癌患者生存期
科学减重,先学会如何判断合理体重
梦见初恋的预示
皇太极去世后,为何是没有势力,年仅6岁的顺治继承了皇位
“消失的女性”:女性如何在婚姻中保持自我?
儿童健康|小朋友指甲有白点是钙质摄取不足? 欧倩怡揭開迷思 建议4类营养宜多摄取
已出租房屋的买卖权利及法律分析
行为树入门教程:最清晰的讲解
人物推定法:揭示隐藏在表象背后的真相
茨城:花卉与美食物语。江户时代传承至今的自然美景与美食美味
心学问青少年教育,青春期的心理迷宫:探索与导航
电动车怎么选电机?48V、60V、72V的电池,该配置多大功率电机?
居家监测血糖的5个误区,分享给您,建议收藏
安放祖先牌位神位的讲究 祖先牌位神位要如何安放
怎么购买合法摩托车?合法摩托车的选购标准是什么?
垂直天窗、V型天窗、施工天窗、维修天窗
经济适用房交易指南:两类经济适用房的区别与过户流程
周杰伦《搁浅》|一曲爱情的无奈与释怀
真耳分析都有哪些测试项目?
我眼中的朝鲜(上)——朝鲜人也离不开这些休闲娱乐工具!
自动驾驶领域各大顶会顶刊集合梳理(附名单)
达州一日游景点推荐:精华路线、必去大全及攻略指南
Type-C转DP线使用指南与选购要点
盲派八字命局断语口诀:如何准确运用这些口诀进行命理分析
留学分享:手握多份硕士 Offer,怎样抉择才不后悔?