c语言编程笔录

首页 >   > 笔记大全

笔记大全

二叉树层序遍历递归python递归层次遍历二叉树

更新时间:2023-12-25

介绍

在数据结构中,树是最常用的一种基本数据结构。其操作和特性可以应用在各种领域,例如编译器技术、操作系统、网络协议等等。二叉树是一种特殊的树,它有如下特点:每个节点最多有两个子节点(left和right),如果有子节点则子节点排列顺序是有序的。

二叉树层序遍历递归python

层序遍历二叉树就是从上到下一层一层输出树中的节点。递归实现层序遍历一般使用dfs遍历,定义一个字典记录每个深度节点,dfs遍历过程中记录当前深度,将节点加入当前深度的列表中即可。

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        res = []
        def dfs(root, level):
            if not root: return
            if len(res) == level: res.append([])
            res[level].append(root.val)
            dfs(root.left, level + 1)
            dfs(root.right, level + 1)
        dfs(root, 0)
        return res

递归层次遍历二叉树

层次遍历一般基于队列实现,因为先进先出的特性。使用队列实现层次遍历时,我们需要记录每个节点的深度,以便将节点插入到相应深度的列表中。如果未记录深度,将难以插入到相应的层次中。

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        res = []
        level = 0
        queue = [(root, 0)]
        while queue:
            node, lv = queue.pop(0)
            if node:
                if len(res) == lv: res.append([])
                res[lv].append(node.val)
                queue.append((node.left, lv+1))
                queue.append((node.right, lv+1))
        return res

代码示例

下面是一个完整的二叉树层序遍历递归和队列实现的示例代码。

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        res = []
        level = 0
        queue = [(root, 0)]
        while queue:
            node, lv = queue.pop(0)
            if node:
                if len(res) == lv: res.append([])
                res[lv].append(node.val)
                queue.append((node.left, lv+1))
                queue.append((node.right, lv+1))
        return res
    
    def levelOrder_recursive(self, root: TreeNode) -> List[List[int]]:
        res = []
        def dfs(root, level):
            if not root: return
            if len(res) == level: res.append([])
            res[level].append(root.val)
            dfs(root.left, level + 1)
            dfs(root.right, level + 1)
        dfs(root, 0)
        return res

总结

二叉树是一种重要的基础数据结构,在很多应用中都有广泛的应用。其中层次遍历是常用的遍历方式,在二叉树中应用广泛。递归和队列都能够实现层次遍历。使用递归实现层次遍历需要记录每个节点深度,而使用队列则要记录深度和节点,从而能够将节点顺序插入到相应的层次中。在实际应用中,根据情况选择不同的方法实现层次遍历。