Leetcode 112. 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.
题目要求求出根节点到叶子节点各个节点的值加起来是否有一条路能满足和为题目给出的sum,这题使用深度优先搜索,从根节点直接搜索到叶子节点,从左子节点开始一路向下搜索相加,将经过的节点存储在一个栈内,将得到的结果存储在另一个栈内,直到叶子节点,如果没有,则弹出栈顶,搜索叶子节点的前一个节点的右节点,直到搜索玩整棵二叉树,若是存在,返回true,若是不存在,返回false。
class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if (root == NULL) return false; stack<TreeNode*> vec_one; stack<int> vec_two; int s = 0; TreeNode* temp = TreeNode(root->val);
temp->left = root ->left;
temp->right = root->right; while (!vec_one.empty() || temp != NULL) { if (temp != NULL) { s += temp->val; vec_one.push(temp); vec_two.push(s); temp = temp->left; } else { temp = vec_one.top(); s = vec_two.top(); vec_one.pop(); vec_two.pop(); if (s == sum && temp->left == NULL && temp->right == NULL) return true; temp = temp->right; } } return false; } };