zoukankan      html  css  js  c++  java
  • 二叉树的深度优先遍历和广度优先遍历

    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)

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

     

  • 相关阅读:
    Java IO/NIO
    LeetCode—— 两两交换链表中的节点
    LeetCode——合并K个排序链表
    LeetCode第201场周赛
    LeetCode第202场周赛
    LeetCode215. 数组中的第K个最大元素
    LeetCode213. 打家劫舍 II
    LeetCode212. 单词搜索 II
    LeetCode211. 添加与搜索单词
    LeetCode210. 课程表 II
  • 原文地址:https://www.cnblogs.com/jiangfan95/p/12431207.html
Copyright © 2011-2022 走看看