📅  最后修改于: 2023-12-03 15:21:39.953000             🧑  作者: Mango
在二叉树中,如果某个节点是叶子节点,并且是它父节点的左儿子,则它是一棵二叉树的最深的左叶节点。
本文将介绍如何使用迭代法来找到一棵二叉树中的最深的左叶节点。
使用迭代法来找到一棵二叉树中最深的左叶节点的思路如下:
下面是实现上述算法的Python代码:
class Solution:
def findBottomLeftValue(self, root: TreeNode) -> int:
if not root:
return None
stack = [(root, 0)]
left_leaf_depth = -1
left_leaf_val = None
while stack:
node, depth = stack.pop()
if not node.left and not node.right and depth > left_leaf_depth and (not left_leaf_val or node == left_leaf_val.parent.left):
left_leaf_depth = depth
left_leaf_val = node
if node.right:
stack.append((node.right, depth + 1))
if node.left:
stack.append((node.left, depth + 1))
return left_leaf_val.val
上述代码中,使用了一个栈来辅助遍历二叉树。栈中存储的是一个二元组(节点,节点的深度),每次遍历时弹出一个节点,并判断是否满足最深的左叶节点的条件。
具体来讲,在判断时,我们需要满足以下要求:
如果满足以上所有条件,则更新最深的左叶节点的深度与值。
在代码中,我们使用了一个变量 left_leaf_val 来记录最深的左叶节点,并使用一个变量 left_leaf_depth 来记录最深左叶节点的深度。变量 left_leaf_val 初始值为 None,变量 left_leaf_depth 初始值为 -1。在每次判断时,如果满足以上所有条件,则进行更新。
最后遍历完整棵二叉树后,返回最深的左叶节点的值即可。
本文介绍了如何使用迭代法来找到一棵二叉树中最深的左叶节点。具体来讲,我们使用栈来辅助遍历二叉树,每次遍历时判断是否满足最深的左叶节点的条件,如果满足则进行更新。最后返回最深的左叶节点的值。代码实现简单且易理解,是一个不错的二叉树问题的练习题。