解题思路

对于二叉树,任意给定节点到根节点之间的路径是唯一固定的。因此其对应的路径个vals的和也是唯一固定的。因此,可利用前序方式对二叉树进行遍历,途中将每个节点中的val值替换成其对应的路径各vals之和。遍历过程中,检查leaf节点的val是否等于sum。

#include <iostream>

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    bool hasPathSum(TreeNode* root, int sum) {
        // write code here
        stack<TreeNode*> s;
        if (!root) return false;
        s.push(root);
        TreeNode* cNode;
        
        while (!s.empty())
        {
            cNode = s.top();
            s.pop();
            
            if (cNode -> left) 
            {
                cNode -> left -> val += cNode -> val;
                s.push(cNode -> left);
            }
            if (cNode -> right) 
            {
                cNode -> right -> val += cNode -> val;
                s.push(cNode -> right);
            }
            
            if((cNode -> val == sum) && (cNode -> left == NULL) && (cNode -> right == NULL))
                return true;
                
        }
        return false;
    }
};