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

📅  最后修改于: 2023-12-03 15:07:57.520000             🧑  作者: Mango

在二叉树中打印只有一个孩子的节点

在二叉树中,节点要么没有孩子,要么有两个孩子,但是也有可能出现只有一个孩子的节点。本篇介绍如何在二叉树中打印只有一个孩子的节点。

算法实现

我们可以通过先序遍历的方式遍历整棵二叉树,在遍历的过程中判断每个节点的孩子个数,如果只有一个孩子,则打印该节点的值。代码实现如下:

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

def printSingleChildNodes(root: TreeNode):
    def dfs(node: TreeNode):
        if not node:
            return
        if node.left and node.right:
            dfs(node.left)
            dfs(node.right)
        elif node.left:
            print(node.val)
            dfs(node.left)
        elif node.right:
            print(node.val)
            dfs(node.right)
        else:
            dfs(node.left)
            dfs(node.right)
    dfs(root)
算法分析

该算法的时间复杂度为 $O(n)$,其中 $n$ 为二叉树中节点的个数。因为该算法采用了先序遍历的方式进行遍历,所以需要遍历整棵二叉树的每个节点,所以时间复杂度为 $O(n)$。

该算法的空间复杂度为 $O(h)$,其中 $h$ 为二叉树的高度。因为该算法采用了递归的方式进行遍历,所以递归调用栈的空间复杂度为 $O(h)$。

总结

以上就是在二叉树中打印只有一个孩子的节点的介绍。这是一个简单的算法,但是需要考虑比较多的情况,代码实现也需要注意细节处理。如果没有理解的地方,可以多看几遍代码,并扬长避短,精益求精,不断优化自己的代码技能。