描述
给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。
1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
2.叶子节点是指没有子节点的节点
3.路径只能从父节点到子节点,不能从子节点到父节点
4.总节点数目为n
class Solution {
public:
/**
*
* @param root TreeNode类
* @param sum int整型
* @return bool布尔型
*/
int add = 0, cnt = 0;
bool isOK = false; // 结果
void preorder(TreeNode* root, int k) {
if (root == NULL) {
return;
}
add += root->val;
if(root->left == NULL && root->right == NULL){
cout << add << " " << k << endl;
if (add == k)isOK = true;
}
preorder(root->left, k);
preorder(root->right, k);
add -= root->val;
}
bool hasPathSum(TreeNode* root, int sum) {
// write code here
if (root == NULL)return false;
preorder(root, sum);
return isOK;
}
};
来源:牛客面试必刷Top101-BM29
思路:遍历每一条路径,将每个节点上的值加进计数器add中,到路径末端与要求值k(sum)比较,若相等则返回true。
踩坑:判空部分,需先判断该节点是否为空,为空返回;再判断左右孩子节点是否为空,否则会发生段错误。
效率:
