📅  最后修改于: 2023-12-03 15:07:14.478000             🧑  作者: Mango
在二叉树中,叶子节点是指没有子节点的节点,其中最后一个叶子节点表示在先序遍历中最后一个访问的叶子节点。在本文中,我们将介绍如何删除这个节点。
为了删除最后一个叶子节点,我们需要从根节点开始遍历整个二叉树,以找到最后一个叶子节点。在此过程中,我们需要记录当前遍历到的节点和它的父亲节点,以便后续进行删除操作。
一旦找到最后一个叶子节点,我们就可以删除它,并更新其父亲节点的指针,以便将其想象成删除最后一个节点后的二叉树的一部分。
下面是一个Python实现示例:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def find_last_leaf_node(root: TreeNode) -> Tuple[TreeNode, TreeNode]:
if not root:
return None, None
node, parent = root, None
while node:
if node.left or node.right:
parent = node
node = node.right or node.left
else:
break
return node, parent
def delete_last_leaf_node(root: TreeNode) -> TreeNode:
node, parent = find_last_leaf_node(root)
if not node:
return root
if not parent:
return None
if parent.right == node:
parent.right = None
else:
parent.left = None
return root
该算法与二叉树的先序遍历类似,因此在最坏情况下,时间复杂度为$O(n)$,其中$n$是树中节点的数量。由于在查找最后一个叶子节点时需要记录其父节点,因此空间复杂度为$O(h)$,其中$h$是树的高度。