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

    Subscribe to see which companies asked this question

    recursion版本

    bool hasPathSum(TreeNode* root, int sum) {
        if (!root)
            return false;
        if ((root->val == sum) && (root->left == nullptr && root->right == nullptr))
            return true;
        return hasPathSum(root->left, sum - root->left->val) || hasPathSum(root->right, sum - root->right->val);
    }

    non-recursion版本

    bool hasPathSum(TreeNode* root, int sum) {
        if (root == nullptr)
            return false;
        stack<TreeNode*> sta;
        sta.push(root);
        sum -= root->val;
        TreeNode* lastRoot = root;
        while (!sta.empty())
        {
            root = sta.top();
            if (lastRoot != root->right)
            {
                if (lastRoot != root->left) {
                    if (root->left != nullptr) {
                        sta.push(root->left);
                        sum -= root->left->val;
                        continue;
                    }
                }
                if (root->right != nullptr) {
                    sta.push(root->right);
                    sum -= root->right->val;
                    continue;
                }
                else if(root->left == nullptr && sum == 0)
                    return true;
            }
            lastRoot = root;
            sta.pop();
            sum += root->val;
        }
        return false;
    }
  • 相关阅读:
    P2495 [SDOI2011]消耗战
    计算机的组成
    人力资源管理【9047】
    物流管理【0670】
    企业战略管理【0612】
    资源经济学【0478】
    金融理论与实务【0466】
    公共关系学【0362】
    电子商务概论【0351】
    教育社会学【0283】
  • 原文地址:https://www.cnblogs.com/sdlwlxf/p/5223524.html
Copyright © 2011-2022 走看看