解题思路
对于二叉树,任意给定节点到根节点之间的路径是唯一固定的。因此其对应的路径个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;
}
};