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;
}