写一个布尔函数来判断一棵树有没有一条根到叶子节点的路径上所有节点数值之和是某个数的,有就返回true,没有返回false。
我这里的方法类似于做 LeetCode 111.Minimum Depth of Binary Tree
的方法。(http://blog.youkuaiyun.com/trident_/article/details/51483115)。只是把深度换成到该节点的数值之和,而且也不仅仅记录一个最小或最大值,而是把所有的路径的和都记在一个数组中,然后遍历数组再去判断。
代码:
int path_sum[10000];
int sum = 0;
int temp = 0;
void dfs(TreeNode* root){
if(root->left == NULL && root->right == NULL){
sum+=root->val;
path_sum[temp] = sum;
temp++;
sum-=root->val;
}else{
sum+=root->val;
if(root->left!=NULL)
dfs(root->left);
if(root->right!=NULL)
dfs(root->right);
sum -= root->val;
}
}
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL)
return false;
dfs(root);
for(int i = 0;i<temp;i++){
if(path_sum[i] == sum)
return true;
}
return false;
}
因为我觉得这种方法可能会用到多次,所以特意再记录一次。