C语言解法
解法思路:这道题使用层序遍历的方法,构造队列。在每一层进入队列后,创建一个同样的节点和队列,当节点左右子树都为空,说明叶子节点,输出当前的值。
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param sum int整型
* @return bool布尔型
*/
bool hasPathSum(struct TreeNode* root, int sum ) {
if (root == NULL) {
return false;
}
int temp_sum[10000] = { 0 };
int end=0, head=0, temp = 0;
struct TreeNode* node[10000];
node[end] = root;
temp_sum[end++] = root->val;
while (head != end) {
temp = end;
for (; head < temp; head++) {
if (node[head]->left != NULL) {
node[end] = node[head]->left;
//在这里,计算当前节点的累积值,存储到队列
temp_sum[end++] = temp_sum[head] + node[head]->left->val;
}
if (node[head]->right != NULL) {
node[end] = node[head]->right;
//在这里,计算当前节点的累积值,存储到队列
temp_sum[end++] = temp_sum[head] + node[head]->right->val;
}
if (node[head]->left == NULL && node[head]->right == NULL) {
//添加一个判断语句,左右孩子为空,说明为叶子节点,比较是否相同
if (temp_sum[head] == sum)
return true;
}
}
}
return false;
}