📅  最后修改于: 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)。