题解 | #二叉树中是否存在节点和为指定值的路径#
二叉树中是否存在节点和为指定值的路径
http://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c
建议大家在做回溯的时候,尽量把回溯写出来,比如当前层--,回溯上一层就++,而不要把回溯
的步骤隐藏起来。
小技巧:
搜索的时候有无返回值的做法:
//1、当搜索整棵树的时候,那么递归函数一般是不需要有返回值,但是也有例外,比如
<1>
TreeNode* left = dfs(root->left);
TreeNode* right = dfs(root->right);
if(判断左右的逻辑)...
<2>
if(...)...
node->left = dfs(root->left);
node->right = dfs(root->right);
return node;
//2、当搜索其中一条符合条件的路径,递归函数就需要及时返回,下面常见的做法
<1>
if(dfs(root->left)) //及时返回
return ...
if(dfs(root->right))
return ...
return ...题目题解
bool dfs(TreeNode *root, int sum) {
if(!root) //空节点的出口
return false;
if(root && !root->left && !root->right && sum == 0) //叶子节点出口
return true;
if(root->left) {
sum -= root->left->val;
if(dfs(root->left, sum)) //如果为true 说明找到结果 及时退出
return true;
sum += root->left->val; //回溯
}
if(root->right) {
sum -= root->right->val;
if(dfs(root->right, sum))
return true;
sum += root->right->val;
}
return false;
}
bool hasPathSum(TreeNode* root, int sum) {
if(!root)
return false;
return dfs(root, sum-root->val); //上面的搜索是从根节点的子树开始搜索 需要把根节点减去
}
CVTE公司福利 678人发布