• Path Sum


    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);
          }
    View Code

    第一题比较简单,递归完成。

    第二题需要记录路径,因此当找到满足条件的左子树时,保存结果但不能返回,因为还需查看右子树。

    vector<vector<int>>pathSum(TreeNode *root, int sum)
          {
              vector<vector<int>> result;
              vector<int> cur;
              pathSum(root, sum, cur, result);
              return result;
    
          }
          void pathSum(TreeNode *root, int gap, vector<int> &cur, vector<vector<int>> &result)
          {
              if (root == nullptr)return;
    
              cur.push_back(root->val);//先压入
              //如果是叶子结点且满足条件,保留
              if (root->left == nullptr && root->right == nullptr)
              {
                  if (root->val == gap)
                      result.push_back(cur);
                  //此时还不能返回
              }
    
              pathSum(root->left, gap - root->val, cur, result);
              pathSum(root->right, gap - root->val, cur, result);
    
              cur.pop_back();//注意弹出已经判断过的结点
          }
    View Code
  • 相关阅读:
    CTSC2018滚粗记
    HNOI2018游记
    NOIWC 2018游记
    PKUWC2018滚粗记
    HNOI2017 游记
    NOIP2017题解
    [HNOI2017]抛硬币
    [HNOI2017]大佬
    NOIP难题汇总
    [NOI2013]树的计数
  • 原文地址:https://www.cnblogs.com/573177885qq/p/5603729.html
Copyright © 2020-2023  润新知