python 遍历_Python实现二叉树的常见遍历操作总结「7种方法」

本文实例讲述了Python实现二叉树的常见遍历操作。分享给大家供大家参考,具体如下:

二叉树的定义

bc835dcdf708f95302c66ea2f47a6c1a.png
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None

二叉树的前序遍历

递归

2de3683b2d82e85500e8fcd8ff8ad203.png
def preorder(root,res=[]): if not root: return res.append(root.val) preorder(root.left,res) preorder(root.right,res) return res

迭代

f31a8bd3779094bc900814bf9cf32a12.png
def preorder(root): res=[] if not root:  return [] stack=[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

二叉树的中序遍历

递归

da14156c27cb45692b6ef7a3ae44b358.png
def inorder(root,res=[]): if not root: return inorder(root.left,res) res.append(root.val) inorder(root.right,res) return res

迭代

2080bebbcd6facd6e3d590cbe7a26978.png
def inorder(root): stack=[] node=root res=[] while stack or node: while node: stack.append(node) node=node.left node=stack.pop() res.append(node.val) node=node.right return res

二叉树的后序遍历

递归

7204bc37be5a7b84ca87457a8f90377e.png
def laorder(root,res=[]): if not root: return laorder(root.left,res) laorder(root.right,res) res.append(root.val) return res

迭代

e378c188ee959c155c8c3b6324c44e24.png
def laorder(root): stack=[root] res=[] while stack: node=stack.pop() if node.left: stack.append(node.left) if node.right: stack.append(node.right) res.append(node.val) return res[::-1]

二叉树的层次遍历

迭代

0da53693deebadcb55f9d15ab61d3fd8.png
def levelorder(root): queue=[root] res=[] while queue: node=queue.pop(0) if node.left:  queue.append(node.left) if node.right: queue.append(node.right) res.append(node.val) return res

最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值