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

 

posted @ 2016-06-21 15:13  牧马人夏峥  阅读(181)  评论(0)    收藏  举报