python深度优先非递归_小张学算法之基础算法:6.树的广度优先遍历和深度优先遍历(非递归python)...

广度优先遍历思想:使用队列,每一层,先将自己遍历后,在将孩子进队列,左先右后。def broad_travel(self, root, func):queue = [root]while queue:node = queue.pop(0)func(node.data)if node.lchild:queue.append(node.lchild)if node.rchild:queue.appen...
摘要由CSDN通过智能技术生成

广度优先遍历

思想:使用队列,每一层,先将自己遍历后,在将孩子进队列,左先右后。

def broad_travel(self, root, func):

queue = [root]

while queue:

node = queue.pop(0)

func(node.data)

if node.lchild:

queue.append(node.lchild)

if node.rchild:

queue.append(node.rchild)

深度优先遍历(非递归)

思想采用栈来保存先驱节点。

线序中序侯旭分开做。先序即遍历时第一次经过是就处理,中序是第二次,后续是第三次。

44c3b495fcf070c74510d71bc010c35d.png

先序遍历:

思想:一直沿着树向左走,遍历自己的时候,同时将左右字节点入栈,由于栈是先入后出的,所以,要先压右孩子再压左孩子,初始值先将root节点入栈。

def deep_travel_first(self, root, func):

stack = [root]

last_pop=None

while stack:

node = stack.pop() #last item

func(node.data)

if node.rchild :

stack.append(node.rchild)

if node.lchild :

stack.append(node.lchild)

中序遍历

思想:一直沿着树向左走,如果左孩子为空,则pop自己,处理,然后将右孩子作为根节点,然后再继续向左走。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值