二叉树的深度优先遍历和广度优先遍历

1.二叉树的遍历方法

1)层次遍历(广度遍历)

  自上而下,从左往右依次遍历  

2)深度遍历

  先序遍历:先访问根结点、再先序遍历左子树、再先序遍历右子树

  中序遍历:先中序遍历左子树、再访问根结点、再中序遍历右子树

  后序遍历:先后序遍历左子树、再后序遍历右子树、最后访问根结点

案例

  

  层次遍历:A 、B、C、D、E、F、G

  先序遍历:A、B、D、E、C、F、G

  中序遍历:D、B、E、A、F、C、G

  后序遍历:D、E、B、A、F、G、C

2.二叉树结构

class TreeNode():
    def __init__(self,value=None,left=None,right=None):
        self.value = value
        self.left = left
        self.right = right

 3.实现

1)层次遍历(广度遍历)

def levelorder(root):
    if root is None:
        return None
    #模拟队列
    q = []
    #先将根结点入队列
    q.append(root)
    #列表为空时,循环终止
    while len(q) != 0:
        for i in range(len(q)):
            #将列表中第一个节点出队
            r = q.pop(0)
        #每一次节点出队都将其左孩子和右孩子入队 if r.left is not None: #左孩子入队 q.append(r.left) if r.right is not None:
          #右孩子入队 q.append(r.right) print(r.value)

 2)深度遍历 (递归)

# 前序遍历
def preTraverse(root):
    if root is None:
        return
    print(root.value)
    preTraverse(root.left)
    preTraverse(root.right)
#中序遍历
def midTravrse(root):
    if root is None:
        return
    midTravrse(root.left)
    print(root.value)
    midTravrse(root.right)
#后续遍历
def afterTraverse(root):
    if root is None:
        return
    afterTraverse(root.left)
    afterTraverse(root.right)
    print(root.value)

非递归实现方法有时间补上

 

原文地址:https://www.cnblogs.com/jiangfan95/p/12431207.html