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);
            }
    };
  • 相关阅读:
    推荐一波好的代码托管
    二十一、如何导入svg图片
    二十、滑动开关css
    十九、CSS如何引入字体
    十八、移动端rem布局
    十五、css3 Filter--滤镜
    十四、css动画基础知识
    十三、初始化标签默认样式
    十二、移动端头部声明
    十一、使用a标签打电话、发短信、发邮件
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4508964.html
Copyright © 2011-2022 走看看