二叉树的深度优先搜索与宽度优先搜索

2020-09-24  本文已影响0人  美雨知春

二叉树遍历方式分为深度优先搜索和宽度优先搜索

  1. 下面先写一个先根序访问,也就是深度优先搜索
def preorder(t, proc)
    if t is None:
        return
    proc(t.data)
    preorder(t.left)
    preorder(t.right)

很简单,递归调用,先处理根数据再处理左子树,右子树。中根序和后根序与此类似,调换一下数据处理顺序就可以了

  1. 宽度优先搜索需要一个队列,是水平访问,要每一层访问完了再访问下一层,下面是实现:
from SQueue import *
def levelorder(t,proc):
    qu = SQueue()
    qu.enqueue(t)
    while not qu.is_empty():
        n = qu.dequeue()
        if t is None:
            continue
        qu.enqueue(t.left)
        qu.enqueue(t.right)
        proc(t.data)

后面还要分析非递归的遍历,分析算法复杂度

上一篇下一篇

猜你喜欢

热点阅读