📌  相关文章
📜  国际空间研究组织 | ISRO CS 2008 |问题 36(1)

📅  最后修改于: 2023-12-03 15:07:33.395000             🧑  作者: Mango

ISRO CS 2008 | 问题 36

本题考查的是计算机科学中的递归和二叉树。

题目描述

在二叉树中,两个结点的路径是指从一个结点开始,中间穿过一些结点,并到达另一个结点的所经过的结点的顺序构成的序列。

对于给定的一棵二叉树和一个整数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);
    }
}

以上是该问题的完整解题思路和对应的代码实现,欢迎大家学习。