zoukankan      html  css  js  c++  java
  • 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.
    

      

    /**
     * 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) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
             queue<TreeNode *> myqueue;
            if(root == NULL) return false;
            myqueue.push(root) ;
            bool flag = false ;
            while(!myqueue.empty())
            {
              TreeNode * tp = myqueue.front();
              myqueue.pop();
              
              if(tp->left){
                    tp->left->val +=tp->val ;
                    myqueue.push(tp->left) ;
              }
              if(tp->right){
                    tp->right->val +=tp->val ;
                    myqueue.push(tp->right) ;
        
              }
              if(NULL == tp->left && NULL == tp->right )
              {
                if(tp->val == sum ) {
                flag = true ;
                break;
                }   
              }
             
            }
            
            return flag ;
        }
    };

     DFS 解法:

    /**
     * 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 DFS(TreeNode * root, int sum){    
            sum += root->val ;
            if(NULL == root->left && root->right == NULL){
                return sum == target;
            }
        
            if(root->left && DFS(root->left,sum)) return true;
            if(root->right && DFS(root->right,sum) ) return true;
            return false;
        }
        bool hasPathSum(TreeNode *root, int sum) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
           target = sum;
           if(root == NULL) return false;
           return DFS(root, 0);
        }
        
    private :
    int target;
    };

    注意递归的退出条件: 最后的节点必须是叶子节点

    --------------------------------------------------------------------天道酬勤!
  • 相关阅读:
    如何改变常用编辑器(eclipse)的字号大小
    IOConsole Updater error
    RNAfold的使用方法
    单因素方差分析(oneway ANOVA)
    Perl内部保留变量(系统变量)
    Perl 中的正则表达式
    Perl Eclipse 格式化代码
    卸载Oracle 9i
    Ubuntu的菜鸟常用的基础命令
    linux as4u2 下安装openssh
  • 原文地址:https://www.cnblogs.com/graph/p/3020342.html
Copyright © 2011-2022 走看看