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