多叉树的遍历:Python 描述

#多叉树 #数据结构

目录

1. 多叉树的层次遍历

from collections import deque

# 二叉树的节点
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left:TreeNode | None = None
        self.right:TreeNode | None = None

# 多叉树的节点
class Node:
    def __init__(self, val):
        self.val = val
        # 孩子节点
        self.children = []

# 多叉树的层次遍历
def level_order(root:Node):
    if root is None:
        return []
    # 用队列保存节点
    queue = deque()
    # 结果
    res = []
    # 根节点入队
    queue.append(root)
    # 遍历
    while queue:
        # 当前层的节点
        level = []
        # 当前层的节点个数
        size = len(queue)
        # 遍历当前层的节点
        for i in range(size):
            # 出队
            node = queue.popleft()
            # 节点值加入当前层
            level.append(node.val)
            # 孩子节点入队
            for child in node.children:
                queue.append(child)
        # 当前层加入结果
        res.append(level)
    return res

2. 多叉树的中序遍历

很明显,没有中序

3. 多叉树的前序和后序遍历

from collections import deque

# 二叉树的节点
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left:TreeNode | None = None
        self.right:TreeNode | None = None

# 多叉树的节点
class Node:
    def __init__(self, val):
        self.val = val
        # 孩子节点
        self.children = []

# 多叉树的前序和后续遍历

# 前序遍历
def preorder(root:Node):
    if root is None:
        return
    print(root.val)
    for child in root.children:
        preorder(child)

# 后序遍历
def postorder(root:Node):
    if root is None:
        return
    ###### 前序位置  #####
    for child in root.children:
        postorder(child)
    ##### 后序位置  #####
    print(root.val)