LeetCode_Path Sum
一.题目
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.
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.
Show Tags
Have you met this question in a real interview?
Yes
No
二.解题技巧
这道题是一道深度优先搜索的。通过分别计算二叉树的左右子树是否的和是否等于sum-root->val来进行深度优先搜索。仅仅有到达也结点搜索才结束,因此,递归的退出条件就是到达叶结点,同一时候。也要考虑输入是空指针的情况,这种情况返回false值。同一时候,因为仅仅要推断是否存在。而不用找到每个这种路径。因此,仅仅要左子树满足条件时,就能够直接返回,不须要处理右子树,这样就能够进行剪枝,降低计算的复杂度。
递归做法的时间复杂度为O(n),空间复杂度为O(logn)。
三.实现代码
#include <iostream> /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ 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) { return false; } if (!root->left && !root->right && root->val == sum) { return true; } int SumChild = sum - root->val; if (hasPathSum(root->left, SumChild)) { return true; } if (hasPathSum(root->right, SumChild)) { return true; } return false; } };
四.体会
这道题是一道普通的二叉树深度优先搜索的题。能够通过递归来实现。
版权全部,欢迎转载。转载请注明出处,谢谢