📌  相关文章
📜  打印具有奇数节点和偶数节点的级别(1)

📅  最后修改于: 2023-12-03 14:54:27.752000             🧑  作者: Mango

打印具有奇数节点和偶数节点的级别

在一颗二叉树中,如果一个节点所在的层数为奇数,我们称这个节点为奇数节点,否则称为偶数节点。现在,需要我们编写一个函数,将一颗二叉树中所有奇数节点和偶数节点分别打印出来。

算法描述

我们通过逐层遍历二叉树的方式,分别记录当前节点的层数,然后根据节点层数的奇偶性将节点值添加进两个不同的列表中。最后,我们将这两个列表依次输出即可。

代码实现
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def print_odd_even_levels(root: TreeNode):
    '''
    打印具有奇数节点和偶数节点的级别

    Parameters:
        root: TreeNode
            二叉树的根节点

    Returns:
        res: Tuple[List[int]]
            res[0]: 奇数节点列表
            res[1]: 偶数节点列表
    '''
    odd_levels = []
    even_levels = []
    queue = [(root, 1)]

    while queue:
        node, level = queue.pop(0)
        if level % 2 == 1:
            odd_levels.append(node.val)
        else:
            even_levels.append(node.val)

        if node.left:
            queue.append((node.left, level+1))
        if node.right:
            queue.append((node.right, level+1))

    return odd_levels, even_levels
单元测试
def test_print_odd_even_levels():
    '''
    测试打印具有奇数节点和偶数节点的级别函数
    '''
    root = TreeNode(1, TreeNode(2, TreeNode(5), TreeNode(6)), TreeNode(3, TreeNode(7), TreeNode(8)))
    res = print_odd_even_levels(root)
    assert res[0] == [1, 5, 6, 7, 8], f"Error: {res[0]}"
    assert res[1] == [2, 3], f"Error: {res[1]}"

test_print_odd_even_levels()
总结

通过这个算法,我们可以很容易地将一棵二叉树中的奇数节点和偶数节点分别打印出来。这个算法的时间复杂度为O(n),空间复杂度为O(n)。