题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
10
/ \
5 12
/ \
4 7
则打印出两条路径:10, 12和10, 5, 7。
先序遍历树即可得到结果。
void FindPath
(
BSTreeNode* pTreeNode, // a node of binary tree
int expectedSum, // the expected sum
std::vector<INT>& path, // a path from root to current node
int& currentSum // the sum of path
)
{
if(!pTreeNode)
return;
currentSum += pTreeNode->m_nValue;
path.push_back(pTreeNode->m_nValue);
//判断是否满足条件
if(currentSum == expectedSum && !pTreeNode->m_pLeft && !pTreeNode->m_pRight)
{
std::vector<INT>::iterator iter = path.begin();
for(; iter != path.end(); ++ iter)
printf("%d\t",*iter);
printf("\n");
}
FindPath(pTreeNode->m_pLeft, expectedSum, path, currentSum);
FindPath(pTreeNode->m_pRight, expectedSum, path, currentSum);
//回溯
currentSum -= pTreeNode->m_nValue;
path.pop_back();
}
回溯,遍历!!