leetcode: path sum (I) 귀속 및 비귀속 해법

2232 단어

Path Sum

 
Total Accepted: 12663 
Total Submissions: 42061 My Submissions
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.
반복 해법:
class Solution{
public:
     bool hasPathSum(TreeNode *root, int sum) {
  if(!root)
  return false;
  else if(root->val == sum && !root->left && !root->right)
return true;
 return hasPathSum(root->left , sum - root->val) || hasPathSum(root->right, sum - root->val);
};
};
비귀속 해법: 두 개의 창고를 정의한다. 하나는 저장 전 순서가 반복되는 결점, 하나는 저장 전 순서가 반복될 때의 결점 누적 값이다.
/**  * Definition for binary tree  * 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;        stack stk;        stack tempSum;                stk.push(root);        tempSum.push(root->val);        while(!stk.empty())        {            TreeNode *nd = stk.top();            stk.pop();            int tpm = tempSum.top();            tempSum.pop();            if(nd->left == NULL && nd->right == NULL && tpm == sum)            {                return true;            }            if(nd->left)            {                stk.push(nd->left);                tempSum.push(tpm + nd->left->val);            }            if(nd->right)            {                stk.push(nd->right);                tempSum.push(tpm + nd->right->val);            }        }        return false;     } };

좋은 웹페이지 즐겨찾기