Suma de Hojas Izquierdas

Este problema consiste en, dada la raíz de un árbol binario, regresar la suma de todas las hojas izquierdas. Una hoja es un nodo sin hijos, y una hoja izquierda es una hoja que además es el hijo izquierdo de su padre.

Solución

class Solution {
public:
    void iter(TreeNode* root, int& total) {
        TreeNode *izq = root->left;
        if (root->right)
            iter(root->right, total);
        if (!izq)
            return;
        if (izq->left == izq->right && izq->left == nullptr) { // es leaf
            total += izq->val;
            return;
        }
        iter(izq, total);
    }

    int sumOfLeftLeaves(TreeNode* root) {
        if (!root)
            return 0;
        int total = 0;
        iter(root, total);
        return total;
    }
};

La función principal maneja el árbol vacío y regresa el total acumulado. La función auxiliar iter revisa el hijo izquierdo del nodo actual: si el subárbol derecho existe, lo recorre primero; si no hay hijo izquierdo, no hay nada que sumar. Si el hijo izquierdo es una hoja (sus dos hijos son nulos), se suma su valor y se detiene esa rama; en caso contrario, se sigue recorriendo el subárbol izquierdo. Así solo se suman los nodos que son hojas y a la vez hijos izquierdos.