题解 | #二叉树中和为某一值的路径(一)#

二叉树中和为某一值的路径(一)

http://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c

DFS。。。

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    bool hasPathSum(TreeNode* root, int sum) {
      if (root == nullptr) {
        return false;
      }
      
        //  一个结点和对应的路径累加和
      std::stack<std::pair<TreeNode *, int>> stack_;
      
      stack_.push({root, root->val});
      
      while (!stack_.empty()) {
        auto tmp = stack_.top();
        stack_.pop();
        
        if (tmp.first->left == nullptr && 
            tmp.first->right == nullptr &&
            tmp.second == sum) {
          return true;
        }
        
        if (tmp.first->left) {
          stack_.push({tmp.first->left, tmp.second + tmp.first->left->val});
        }
        if (tmp.first->right) {
          stack_.push({tmp.first->right, tmp.second + tmp.first->right->val});
        }
      }
      
      return false;
    }
};

递归求解:

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

相关推荐

码农索隆:卡学历都不行了,开始卡颜值了
点赞 评论 收藏
分享
想熬夜的小飞象在秋招:我觉得这模版挺好啊,可以调大点行距,大佬能不能推荐一下是在哪找的模板
应届生,你找到工作了吗
点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务