📌  相关文章
📜  打印二叉树中只有一个孩子的节点(1)

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