次のコードは、特定のsum
に等しいすべてのルートからリーフパスを検索するために使用され、バイナリツリーとsum
が与えられています。ベクトル要素のポップについて
class Solution {
public:
void buildResult(std::vector< std::vector<int> >& result, std::vector<int>& ans, TreeNode* root, int sum) {
if(!root)
return;
ans.push_back(root->val);
if(root->val==sum && !root->left && !root->right)
result.push_back(ans);
buildResult(result, ans, root->left, sum-(root->val));
buildResult(result, ans, root->right, sum-(root->val));
ans.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
std::vector< vector<int> > result;
std::vector<int> ans;
if(!root)
return result;
buildResult(result, ans, root, sum);
return result;
}
};
上記のコードは動作し、期待される出力を生成します。しかし、私は文の使用を理解していませんans.pop_back();
- 私はそれがバックトラックのためだと理解していますが、正確にこのバックトラックが行われたのですか?これらの値は、有効なパス上にあるかどうかを確認する前に、ベクトルans
に挿入されています。さらに、pop_back()
の数は、間違った合計につながる数字がいくつ挿入されたかによって多くなるはずです。誰かが私にこのことを説明してくれますか?
ありがとうございます!
小さなテストケースを作成して、デバッガや鉛筆、紙を使って自分の動作を確認することができます。 –
@JamesRoot、私はそれを試みた。私は理解できません。どんな指針も大変ありがとうございます。 –