112. 路径总和

简介: 112. 路径总和

题目链接:112. 路径总和




思路一:迭代


stack和queue都能实现功能,差距只是在pop上


stack时间复杂度好点,毕竟栈头的结点与栈尾的结点相比更可能是叶子结点


class Solution {
public:
  bool hasPathSum(TreeNode* root, int targetSum) {
        if (!root) return false;
        stack<pair<TreeNode*, int>> s;
        s.push(make_pair(root, root->val));
        while (!s.empty()) {
            pair<TreeNode*, int> node = s.top();
            s.pop();
            // 如果该节点是叶子节点了,同时该节点的路径数值等于targetSum,那么就返回true
            if (!node.first->left && !node.first->right && targetSum == node.second) return true;
            //压入右节点
            if (node.first->right) s.push(make_pair(node.first->right, node.second + node.first->right->val));
            //压入左节点
            if (node.first->left) s.push(make_pair(node.first->left, node.second + node.first->left->val));
        }
        return false;
  }
};


上面代码的对组也可以用两个栈替换,一个栈记录结点,一个栈记录路径长度;官方答案就是这样的


思路二:递归


这递归套娃真难受


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


相关文章
|
19天前
leetcode113路径总和2
leetcode113路径总和2
28 0
|
19天前
|
机器学习/深度学习
动态规划|【路径问题】|931.下降路径最小和
动态规划|【路径问题】|931.下降路径最小和
|
19天前
|
C++
路径总和(C++)
路径总和(C++)
20 1
|
19天前
|
算法 前端开发
前端算法-路径总和
前端算法-路径总和
|
19天前
leetcode-437:路径总和 III
leetcode-437:路径总和 III
26 0
|
19天前
|
Java C++ Python
leetcode-112:路径总和
leetcode-112:路径总和
31 0
|
19天前
|
存储 算法 程序员
【算法训练-二叉树 六】【路径和计算】路径总和I、路径总和II、路径总和III、二叉树的最大路径和
【算法训练-二叉树 六】【路径和计算】路径总和I、路径总和II、路径总和III、二叉树的最大路径和
53 0
|
11月前
|
算法 Go
LeetCode 437. 路径总和 III
LeetCode 437. 路径总和 III
61 0
LeetCode 437. 路径总和 III