二叉树遍历全攻略:3种方式轻松掌握
二叉树遍历算法详解:前序、中序与后序遍历
二叉树的遍历是数据结构与算法中的基础内容,掌握前序、中序和后序遍历对于理解树结构至关重要。以下是三种遍历方式的实现方法与应用场景分析。
递归实现
递归是最直观的遍历方式,代码简洁但需要注意栈溢出问题。
前序遍历(根-左-右)
def preorderTraversal(root):
res = []
def traverse(node):
if not node:
return
res.append(node.val)
traverse(node.left)
traverse(node.right)
traverse(root)
return res
中序遍历(左-根-右)
def inorderTraversal(root):
res = []
def traverse(node):
if not node:
return
traverse(node.left)
res.append(node.val)
traverse(node.right)
traverse(root)
return res
后序遍历(左-右-根)
def postorderTraversal(root):
res = []
def traverse(node):
if not node:
return
traverse(node.left)
traverse(node.right)
res.append(node.val)
traverse(root)
return res
迭代实现
迭代法通过显式使用栈来模拟递归过程,更适合处理深度较大的树。
前序遍历迭代版
def preorderTraversal(root):
res = []
stack = []
if root:
stack.append(root)
while stack:
node = stack.pop()
res.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res
中序遍历迭代版
def inorderTraversal(root):
res = []
stack = []
curr = root
while curr or stack:
while curr:
stack.append(curr)
curr = curr.left
curr = stack.pop()
res.append(curr.val)
curr = curr.right
return res
后序遍历迭代版
def postorderTraversal(root):
res = []
stack = []
prev = None
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
if not root.right or root.right == prev:
res.append(root.val)
prev = root
root = None
else:
stack.append(root)
root = root.right
return res
莫里斯遍历(Morris Traversal)
该算法能在O(1)空间复杂度下完成遍历,通过临时修改树结构实现。
中序遍历莫里斯版
def inorderTraversal(root):
res = []
curr = root
while curr:
if not curr.left:
res.append(curr.val)
curr = curr.right
else:
pre = curr.left
while pre.right and pre.right != curr:
pre = pre.right
if not pre.right:
pre.right = curr
curr = curr.left
else:
pre.right = None
res.append(curr.val)
curr = curr.right
return res
应用场景分析
- 前序遍历:用于复制树结构,序列化二叉树时常用
- 中序遍历:二叉搜索树会产生有序序列,用于验证BST性质
- 后序遍历:适用于删除树节点,计算子树属性等场景
复杂度对比
| 遍历方式 | 时间复杂度 | 空间复杂度 | |----------|------------|------------| | 递归 | O(n) | O(h) | | 迭代 | O(n) | O(h) | | 莫里斯 | O(n) | O(1) |
其中n为节点数,h为树高度。实际应用中应根据具体场景选择合适方法,递归简洁但可能栈溢出,迭代稳定但代码稍复杂,莫里斯节省空间但会修改树结构。
BbS.okane479.info/PoSt/1121_246355.HtM
BbS.okane480.info/PoSt/1121_284288.HtM
BbS.okane481.info/PoSt/1121_691408.HtM
BbS.okane482.info/PoSt/1121_769068.HtM
BbS.okane483.info/PoSt/1121_781914.HtM
BbS.okane484.info/PoSt/1121_545200.HtM
BbS.okane485.info/PoSt/1121_189947.HtM
BbS.okane486.info/PoSt/1121_255414.HtM
BbS.okane487.info/PoSt/1121_431002.HtM
BbS.okane488.info/PoSt/1121_568327.HtM
BbS.okane479.info/PoSt/1121_260618.HtM
BbS.okane480.info/PoSt/1121_634086.HtM
BbS.okane481.info/PoSt/1121_478259.HtM
BbS.okane482.info/PoSt/1121_978388.HtM
BbS.okane483.info/PoSt/1121_754321.HtM
BbS.okane484.info/PoSt/1121_961057.HtM
BbS.okane485.info/PoSt/1121_157826.HtM
BbS.okane486.info/PoSt/1121_940403.HtM
BbS.okane487.info/PoSt/1121_475315.HtM
BbS.okane488.info/PoSt/1121_981141.HtM
BbS.okane479.info/PoSt/1121_516931.HtM
BbS.okane480.info/PoSt/1121_749747.HtM
BbS.okane481.info/PoSt/1121_571488.HtM
BbS.okane482.info/PoSt/1121_730774.HtM
BbS.okane483.info/PoSt/1121_439033.HtM
BbS.okane484.info/PoSt/1121_621183.HtM
BbS.okane485.info/PoSt/1121_898974.HtM
BbS.okane486.info/PoSt/1121_706932.HtM
BbS.okane487.info/PoSt/1121_577477.HtM
BbS.okane488.info/PoSt/1121_269094.HtM
BbS.okane479.info/PoSt/1121_168632.HtM
BbS.okane480.info/PoSt/1121_540702.HtM
BbS.okane481.info/PoSt/1121_212373.HtM
BbS.okane482.info/PoSt/1121_727050.HtM
BbS.okane483.info/PoSt/1121_595760.HtM
BbS.okane484.info/PoSt/1121_017165.HtM
BbS.okane485.info/PoSt/1121_557604.HtM
BbS.okane486.info/PoSt/1121_175373.HtM
BbS.okane487.info/PoSt/1121_596616.HtM
BbS.okane488.info/PoSt/1121_438059.HtM
BbS.okane479.info/PoSt/1121_862725.HtM
BbS.okane480.info/PoSt/1121_511109.HtM
BbS.okane481.info/PoSt/1121_179242.HtM
BbS.okane482.info/PoSt/1121_944818.HtM
BbS.okane483.info/PoSt/1121_386984.HtM
BbS.okane484.info/PoSt/1121_587815.HtM
BbS.okane485.info/PoSt/1121_526457.HtM
BbS.okane486.info/PoSt/1121_975780.HtM
BbS.okane487.info/PoSt/1121_966368.HtM
BbS.okane488.info/PoSt/1121_851686.HtM
BbS.okane479.info/PoSt/1121_901457.HtM
BbS.okane480.info/PoSt/1121_249762.HtM
BbS.okane481.info/PoSt/1121_510907.HtM
BbS.okane482.info/PoSt/1121_739287.HtM
BbS.okane483.info/PoSt/1121_866429.HtM
BbS.okane484.info/PoSt/1121_747372.HtM
BbS.okane485.info/PoSt/1121_528888.HtM
BbS.okane486.info/PoSt/1121_544798.HtM
BbS.okane487.info/PoSt/1121_683686.HtM
BbS.okane488.info/PoSt/1121_084161.HtM
BbS.okane479.info/PoSt/1121_647020.HtM
BbS.okane480.info/PoSt/1121_861153.HtM
BbS.okane481.info/PoSt/1121_647074.HtM
BbS.okane482.info/PoSt/1121_647295.HtM
BbS.okane483.info/PoSt/1121_237801.HtM
BbS.okane484.info/PoSt/1121_219220.HtM
BbS.okane485.info/PoSt/1121_165551.HtM
BbS.okane486.info/PoSt/1121_631988.HtM
BbS.okane487.info/PoSt/1121_146874.HtM
BbS.okane488.info/PoSt/1121_737898.HtM
BbS.okane479.info/PoSt/1121_178418.HtM
BbS.okane480.info/PoSt/1121_967466.HtM
BbS.okane481.info/PoSt/1121_083096.HtM
BbS.okane482.info/PoSt/1121_564462.HtM
BbS.okane483.info/PoSt/1121_671084.HtM
BbS.okane484.info/PoSt/1121_832594.HtM
BbS.okane485.info/PoSt/1121_189867.HtM
BbS.okane486.info/PoSt/1121_822911.HtM
BbS.okane487.info/PoSt/1121_627401.HtM
BbS.okane488.info/PoSt/1121_560446.HtM

基恩士成长空间 440人发布