题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
void FindPath(BinaryTreeNode* pRoot, int expectedSum, vector<int>& path, int& currentSum)
{
currentSum += pRoot->m_nValue;
path.push_back(pRoot->m_nValue);
bool isLeaf = pRoot->m_pLeft == nullptr && pRoot->m_pRight == nullptr;
if (currentSum == expectedSum && isLeaf)
{
printf("A path is found: ");
std::vector<int>::iterator iter = path.begin();
for (; iter != path.end(); ++iter)
printf("%d\t", *iter);
printf("\n");
}
if (pRoot->m_pLeft != nullptr)
FindPath(pRoot->m_pLeft, expectedSum, path, currentSum);
if (pRoot->m_pRight != nullptr)
FindPath(pRoot->m_pRight, expectedSum, path, currentSum);
currentSum -= pRoot->m_nValue;
path.pop_back();
}
void FindPath(BinaryTreeNode* pRoot, int expectedSum)
{
if (pRoot == nullptr)
return;
vector<int> path;
int currentSum = 0;
FindPath(pRoot, expectedSum, path, currentSum);
}