📅  最后修改于: 2023-12-03 15:07:33.395000             🧑  作者: Mango
本题考查的是计算机科学中的递归和二叉树。
在二叉树中,两个结点的路径是指从一个结点开始,中间穿过一些结点,并到达另一个结点的所经过的结点的顺序构成的序列。
对于给定的一棵二叉树和一个整数sum,判断该二叉树中是否存在一条路径,其所有经过结点的值相加等于给定的sum。
bool hasPathSum(struct TreeNode* root, int sum);
root
,一棵二叉树的根节点sum
,给定的整数返回值为布尔类型,如果存在一条路径其所有经过结点的值相加等于给定的sum,返回true,否则返回false。
二叉树:
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
root = [5,4,8,11,null,13,4,7,2,null,null,null,1]
sum = 22
true
要判断该二叉树是否存在一条路径其所有经过结点的值相加等于给定的sum,我们可以先判断根节点是否存在,若不存在则返回false;否则,我们可以使用递归算法,将sum减去当前节点的值之后,分别向左子树和右子树进行递归操作,直到找到满足条件的路径。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool hasPathSum(struct TreeNode* root, int sum) {
if(root == NULL) return false;
if(root->left == NULL && root->right == NULL){
return root->val == sum;
}else{
return hasPathSum(root->left, sum - root->val) || hasPathSum(root->right, sum - root->val);
}
}
以上是该问题的完整解题思路和对应的代码实现,欢迎大家学习。