二叉树遍历算法详解:前序、中序、后序与层序遍历
创作时间:
作者:
@小白创作中心
二叉树遍历算法详解:前序、中序、后序与层序遍历
引用
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个节点
热门推荐
桃树出粘胶是什么原因?
桃胶:从“树上燕窝”到餐桌上的膳食纤维
关于脂肪肝,您了解多少?
PUBG枪械谁最强?《绝地求生》2024最新枪械强度排行榜!
揭秘透光混凝土:从起源到未来,一场光的革命
有效管理仓库进销存台账的方法
父母一旦有这8种病,子女也会大概率遗传,很多人却不知道
《像素工厂》攻略:从资源开采到防御布阵的全方位指南
肆虐数千年的天花,是怎么“死”的?
[清洁妙招]柠檬酸:水垢克星的全方位清洁指南
弧度制与角度制的换算公式表格
AI绘画生成画面描述怎么写:提升描述技巧与写作要点
华硕BIOS中文对照表图解——轻松搞定BIOS设置(让BIOS设置不再困惑你)
如何使用EZ Flash更新BIOS
六爻占卜技巧详解:从摇卦到解卦的完整指南
重磅!60岁以上老人旅游迎来重大利好:交通、住宿全面优惠
如何根据大企业税务风险管理指引制定合规策略?
黛昂丝:防晒秘籍大公开 如何全方位保护肌肤免受紫外线伤害
道教天师是什么级别?道教天师有哪些?
女性快要绝经时,身体往往会有4个提示,如果没有,说明你还年轻
新能源汽车安全新规3月起实施,你的车达标了吗?
皮肤外用药使用全攻略:从用药到保存的七大注意事项
尿酸高喝什么中药代茶饮
四川特产送礼指南:精选土特产佳选
自动泊车功能是否可以加装?
墙布的搭配技巧:从颜色到材质的全方位指南
“东莞制造”再转型:如何寻找新市场与新投资?
千年文脉所系,莞城如何守护“东莞记忆”?
“人工关节”一文详解,涉及这些高分子材料!
如何做进销存数据分析报告