📅  最后修改于: 2023-12-03 15:10:01.449000             🧑  作者: Mango
给定一棵二叉树,打印出其中只有一个孩子的节点。
我们可以通过遍历二叉树,并记录每个节点的孩子节点数量,然后找到只有一个孩子的节点并打印出来。
以下是一个基于递归遍历二叉树的示例代码:
class Node:
def __init__(self, value=None, left=None, right=None):
self.value = value
self.left = left
self.right = right
def print_single_child_nodes(root):
if root is None:
return
if root.left is not None and root.right is not None:
print_single_child_nodes(root.left)
print_single_child_nodes(root.right)
elif root.left is not None:
print(root.left.value)
print_single_child_nodes(root.left)
elif root.right is not None:
print(root.right.value)
print_single_child_nodes(root.right)
else:
return
# 测试代码
root = Node(1, Node(2, Node(4), None), Node(3, None, Node(5)))
print_single_child_nodes(root)
# 输出结果:4, 5
在上面的示例代码中,我们定义了一个 Node
类来表示二叉树节点,具有值、左子树和右子树三个属性。然后我们定义了一个 print_single_child_nodes
函数来打印只有一个孩子的节点。该函数通过递归遍历二叉树,并判断每个节点的孩子节点数量来找到目标节点。
上面的算法遍历了二叉树的每个节点,时间复杂度为 O(n)
,其中 n
是二叉树节点数量。由于递归过程中使用了额外的系统栈空间,因此空间复杂度也为 O(n)
。
本文讲解了如何打印二叉树中只有一个孩子的节点。我们通过递归遍历二叉树,并记录每个节点的孩子节点数量,找到只有一个孩子的节点并打印出来。这个算法的时间复杂度为 O(n)
,空间复杂度也为 O(n)
。