LeetCode 112. Path Sum

来源:互联网 发布:怪物猎人x数据库app 编辑:程序博客网 时间:2024/06/10 03:22

LeetCode 112. Path Sum

Description:

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

Example:

For example:
Given the below binary tree and sum = 22,

              5             / \            4   8           /   / \          11  13  4         /  \      \        7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.


分析:

首先判断根节点是否为空,若为空,则返回false,表示肯定不能找到一条路径上的数之和等于sum;
若不空,则判断左右子树是否为空,若为空,则比较根节点的数是否等于sum,若为真,返回true;反之返回false;
若前面都不满足条件,则证明树的高度至少为2,递归左子树,将sum的值改成sum - root->val;递归右子树,将sum的值改成sum - root->val,即可求解。

代码如下:

#include <iostream>using namespace std;/** * Definition for a binary tree node. */struct TreeNode {    int val;    TreeNode *left;    TreeNode *right;    TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public:    bool hasPathSum(TreeNode* root, int sum) {        if (root == NULL) return false;        if (root->left == NULL && root->right == NULL) return sum == root->val ? true : false;        return hasPathSum(root->left, sum - root->val) || hasPathSum(root->right, sum - root->val);    }};// 构造二叉树int TreeNodeCreate(TreeNode* &tree) {    int val;    cin >> val;    if (val < 0) // 小于0表示空节点        tree = NULL;    else {        tree = new TreeNode(val); // 创建根节点        tree->val = val;        TreeNodeCreate(tree->left); // 创建左子树        TreeNodeCreate(tree->right);// 创建右子树    }    return 0;}int main() {    Solution s;    TreeNode* tree;    TreeNodeCreate(tree);    int sum;    cin >> sum;    cout << s.hasPathSum(tree, sum) << endl;    return 0;}
原创粉丝点击