数据结构与算法1:二叉树(binary_tree)的前、中、后序(深度优先)和广度优先遍历及python代码实现

目录

  • 二叉树的前中后序遍历定义
  • 用递归的方法创建树和遍历树

二叉树的前中后序遍历定义

数据结构与算法1:二叉树(binary_tree)的前、中、后序(深度优先)和广度优先遍历及python代码实现_第1张图片

  1. 树(英语:Tree)是一种无向图(undirected graph),其中任意两个顶点间存在唯一一条路径。或者说,只要没有回路的连通图就是树
  2. 二叉树(英语:Binary tree)是每个节点最多只有两个分支(不存在分支度大于2的节点)
    的树结构。通常分支被称作“左子树”和“右子树”。二叉树的分支具有左右次序,不能颠倒。
  3. 完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。
  4. 平衡二叉树:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

对于树的遍历有两大类方法:
5. 深度优先遍历:包括前、中、后序三种遍历;
6. 广度遍历:即我们平常所说的层次遍历(需要其他数据结构的支撑,比如队列)

  1. 前序遍历:根节点---->左子树---->右子树(对于上述图片的树,遍历结果即为:EBADCFHGI)
  2. 中序遍历:左子树---->根节点---->右子树(对于上述图片的树,遍历结果即为:ABCDEFGHI)
  3. 后续遍历:左子树---->右子树---->根节点(对于上述图片的树,遍历结果即为:ACDBGIHFE)
  4. 广度优先遍历:层次遍历,一层一层遍历(对于上述图片的树,遍历结果即为:EBFADHCGI)
    需要注意的是,中序遍历最常用

用递归的方法创建树和遍历树

class Node(object):
    """创建一个构造树的类"""
    def __init__(self, value=None, left=None, right=None):
        super(Node, self).__init__()
        self.value = value
        self.left = left    # 左子树
        self.right = right  # 右子树
def PreOrder(root):
    '''
    前序遍历
    '''
    if root == None:
        return 
    print(root.value)
    PreOrder(root.left)
    PreOrder(root.right)
def InOrder(root):
    '''
    中序遍历
    '''
    if root == None:
        return
    InOrder(root.left)
    print(root.value)
    InOrder(root.right)
def Subsequent(root):
    '''
    后序遍历
    '''
    if root == None:
        return
    Subsequent(root.left)
    Subsequent(root.right)
    print(root.value)
def LevelTraaverse(root):
    '''
    广度优先遍历:层次遍历
    '''
    if root == None:
        return
    queue = []          # 新建一个队列
    queue.append(root)  # 将根节点入队
    while len(queue):   # 只要队列不为空,一直循环
        lenth_q = len(queue)
        for i in range(lenth_q):
            r = queue.pop(0)            # 根节点出队,并存放于r
            if r.left is not None:
                queue.append(r.left)    # 左节点入队
            if r.right is not None:
                queue.append(r.right)   # 右节点入队
            print(r.value) 

main函数:

if __name__=='__main__':
    root=Node('E',left=Node('B',left=Node('A'),right=Node('D',left=Node('C'))), right=Node('F',right=Node('H',left=Node('G'),right=Node('I'))))
    print("PreOrder traversal result:")
    PreOrder(root)
    print("InOrder traversal result:")
    InOrder(root)
    print("Subsequent traversal result:")
    Subsequent(root)
    print("LevelTraaverse result:")
    LevelTraaverse(root)

结果:
数据结构与算法1:二叉树(binary_tree)的前、中、后序(深度优先)和广度优先遍历及python代码实现_第2张图片

参考:
[1]. 深入学习二叉树(一) 二叉树基础
[2]. 二叉树遍历(前序、中序、后序、层次遍历、深度优先、广度优先)

你可能感兴趣的:(算法Algorithms)