面试题25:输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
void findPath(BinaryTreeNode* pRoot,int exceptedSum,std::vector<int> &path,int currentSum){
currentSum+=pRoot->m_nValue;
path.push_back(pRoot->m_nValue);
bool isLeaf = pRoot->m_pLeft==NULL&&pRoot->m_pRight==NULL;
if(currentSum==exceptedSum&&isLeaf){
printf("a path find:");
std::vector<int>::iterator it = path.begin();
for(;it!=path.end();it++){
printf("%d\t",*it);
}
printf("\n");
}
if(pRoot->m_pLeft)
findPath(pRoot->m_pLeft,exceptedSum,path,currentSum);
if(pRoot->m_pRight)
findPath(pRoot->m_pRight,exceptedSum,path,currentSum);
//currentSum -= pRoot->m_nValue;
path.pop_back();
}
void findPath(BinaryTreeNode* pRoot,int exceptedSum){
int currentSum=0;
if(pRoot==NULL)return;
std::vector<int> path;
findPath(pRoot,exceptedSum,path,currentSum);
}
参考:剑指offer 何海涛