Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such this adding up all the values along the Path equals the given sum.
For example:
Given the below binary tree sum = 22 and,
5 / 4 8 / / / 4 / \ 7 2 1
Return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
The problem is depth-first traversal (DFS), which uses variable pathsum to record the sum of nodes in the stack.
The node in the stack is the path from the root node to the current node.
If the current node is a leaf node, check whether Pathsum equals sum.
/** Definition for binary tree * struct TreeNode {* int val; * TreeNode *left; * TreeNode *right; * T Reenode (int x): Val (x), left (null), right (NULL) {} *}; */classSolution { Public: BOOLHaspathsum (TreeNode *root,intsum) { if(Root = =NULL)return false; intPathsum =0; Stack<TreeNode*>s; Unordered_set<TreeNode*>visited; //Visit RootS.push (root); Pathsum+ = Root->Val; Visited.insert (root); //whenever add a node into pathsum, check it if(Root->left = = NULL && Root->right = =NULL) {//root itself is leaf if(Pathsum = =sum)return true; } while(!S.empty ()) {TreeNode* top =S.top (); if(top->Left ) {// have left if(Visited.find (top->left) = =Visited.end ()) {//Not visited//VisitS.push (top->Left ); Pathsum+ = Top->left->Val; Visited.insert (Top-Left ); //Judge Leaf if(Top->left->left = = NULL && Top->left->right = =NULL) {//Leaf if(Pathsum = =sum)return true; } Continue; } } if(top->Right ) {// have right if(Visited.find (top->right) = =Visited.end ()) {//Not visited//VisitS.push (top->Right ); Pathsum+ = Top->right->Val; Visited.insert (Top-Right ); //Judge Leaf if(Top->right->left = = NULL && Top->right->right = =NULL) {//Leaf if(Pathsum = =sum)return true; } Continue; }} s.pop (); //no need to go down, popPathsum-= top->Val; } return false; }};
"Leetcode" Path Sum