📌  相关文章
📜  在每次迭代中打印并删除给定二叉树的叶节点(1)

📅  最后修改于: 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;否则,按照右左的顺序将左右子树加入栈中。

总结

以上就是两种常用的实现方式,根据题目要求,我们需要在每次迭代中找出二叉树中的叶子节点,打印并删除它们。无论是递归还是迭代,都需要对当前节点进行判断,以确定是否为叶子节点。具体的实现可以根据自己的喜好进行选择,有任何疑问和建议,欢迎在评论区留言。