📅  最后修改于: 2023-12-03 14:51:29.893000             🧑  作者: Mango
这是一个关于二叉树操作的问题,题目要求在每次迭代中找出二叉树中的叶子节点,打印并删除它们。这是一个比较基础的树遍历问题,可以使用递归或迭代的方式来实现。
我们可以使用递归的方式来遍历二叉树,每次遍历到一个节点时,判断它是否为叶子节点,如果是,则打印并删除该节点。具体的实现可以参考下面的代码片段:
def delete_tree_leaves(root):
if root is None:
return
if root.left is None and root.right is None:
print(root.val)
root = None
else:
delete_tree_leaves(root.left)
delete_tree_leaves(root.right)
以上代码中,我们首先判断根节点是否为空,如果为空则直接返回。然后判断当前节点是否为叶子节点,如果是,则打印该节点的值并将其置为None;否则,递归遍历左右子树。
我们可以使用栈来模拟递归遍历二叉树的过程,每次将当前节点加入栈中,然后处理左右子树。具体的实现可以参考下面的代码片段:
def delete_tree_leaves(root):
if root is None:
return
stack = [root]
while stack:
cur = stack.pop()
if cur.left is None and cur.right is None:
print(cur.val)
cur = None
else:
if cur.right:
stack.append(cur.right)
if cur.left:
stack.append(cur.left)
以上代码中,我们首先判断根节点是否为空,如果为空则直接返回。然后初始化一个栈,并将根节点加入栈中。在每次循环中,取出栈顶元素,判断该节点是否为叶子节点,如果是,则打印该节点的值并将其置为None;否则,按照右左的顺序将左右子树加入栈中。
以上就是两种常用的实现方式,根据题目要求,我们需要在每次迭代中找出二叉树中的叶子节点,打印并删除它们。无论是递归还是迭代,都需要对当前节点进行判断,以确定是否为叶子节点。具体的实现可以根据自己的喜好进行选择,有任何疑问和建议,欢迎在评论区留言。