该题解采用了迭代的深度优先搜索(DFS)方法来解决问题。首先,如果根节点为空,则直接返回0。对于非空的树,使用一个栈来存储需要遍历的节点及其对应的当前二进制数值。栈的初始化包含根节点和其值。在遍历过程中,每次从栈中弹出一个元素,检查是否为叶子节点(即左右子树都为空)。如果是叶子节点,则将当前的二进制数值加到结果中。如果不是叶子节点,则对其非空的子节点进行处理,将子节点以及对应的更新后的二进制数值(当前值左移一位加上子节点的值,即currVal * 2 + currTree.child.val)压入栈中。这个过程重复直到栈为空,最后返回累加的结果。
时间复杂度: O(n)
空间复杂度: O(n)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sumRootToLeaf(self, root: Optional[TreeNode]) -> int:
if root is None:
return 0
result = 0
stack = [[root, root.val]]
while stack:
curr, currVal = stack.pop()
if curr.left is None and curr.right is None:
result += currVal # Add the value of the leaf node
else:
if curr.left:
stack.append([curr.left, currVal * 2 + curr.left.val]) # Push left child with updated value
if curr.right:
stack.append([curr.right, currVal * 2 + curr.right.val]) # Push right child with updated value
return result