zoukankan      html  css  js  c++  java
  • 【Path Sum】cpp

    题目:

    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 a binary tree node.
     * 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;
                int next = sum - root->val;
                if ( !root->left && !root->right ) return sum==root->val;
                if ( root->left && !root->right ) return Solution::hasPathSum(root->left, next);
                if ( !root->left && root->right ) return Solution::hasPathSum(root->right, next);
                return Solution::hasPathSum(root->left, next) || Solution::hasPathSum(root->right, next);
        }
    };

    tips:

    一开始没理解好题意。

    这个题要求必须走到某条path的叶子节点才算数,因此终止条件为走到叶子节点或者NULL。此外,root->left或者root->right不为NULL才往这个分支走。

    ============================================

    第二次过这道题,终止条件是要走到叶子节点,但是参数传递写的有点儿啰嗦。

    /**
     * Definition for a binary tree node.
     * 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)
            {
                bool find = false;
                if(root) Solution::pathSum(root, sum, 0, find);
                return find;
            }
            static void pathSum(TreeNode* root, int sum, int pathsum, bool& find)
            {
                if ( find ) return;
                if ( !root->left && !root->right ) 
                {
                    if ( (pathsum+root->val)==sum )
                    {
                        find = true;
                        return;
                    }
                }
                if ( root->left ) Solution::pathSum(root->left, sum, pathsum+root->val, find);
                if ( root->right ) Solution::pathSum(root->right, sum, pathsum+root->val, find);
            }
    };
  • 相关阅读:
    八皇后-递归
    代码复用3
    权限管理系统-角色组模块
    MzBlog分析
    linux shell 终端中文乱码(转)
    LINUX下中文语言包的安装(转)
    每一个程序员必须知道的业内英语词汇(转)
    80后创业故事之:兄弟散伙,创业失败(转)
    尊重用户的习惯审美,不要挑战用户的习惯(转)
    libpcre.so.1 cannot be found
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4508964.html
Copyright © 2011-2022 走看看