📅  最后修改于: 2023-12-03 15:07:57.476000             🧑  作者: Mango
在二叉树中,左叶子节点是指它是父节点的左子节点且没有子节点,而右叶子节点是指它是父节点的右子节点且没有子节点。本文将介绍如何分别打印出二叉树中的左叶子节点和右叶子节点。
我们可以使用递归的方式来遍历二叉树,对于每个节点,判断它是否是叶子节点,如果是,则将其加入到对应的列表中。具体实现细节详见代码实现。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def print_left_leaves(root):
"""
打印二叉树中的左叶子节点
"""
left_leaves = []
def dfs(node, is_left):
if not node:
return
if not node.left and not node.right and is_left:
left_leaves.append(node.val)
dfs(node.left, True)
dfs(node.right, False)
dfs(root, False)
return left_leaves
def print_right_leaves(root):
"""
打印二叉树中的右叶子节点
"""
right_leaves = []
def dfs(node, is_right):
if not node:
return
if not node.left and not node.right and is_right:
right_leaves.append(node.val)
dfs(node.left, False)
dfs(node.right, True)
dfs(root, False)
return right_leaves
# 测试样例
root = TreeNode(3, TreeNode(9), TreeNode(20, TreeNode(15), TreeNode(7)))
assert print_left_leaves(root) == [9, 15]
assert print_right_leaves(root) == [7]
本文介绍了如何通过递归的方式打印出二叉树中的左叶子节点和右叶子节点。使用递归的方式可以比较简洁地实现这个功能,同时也加深了对二叉树遍历的理解。