思路:
1、设置vector保存值,前序遍历二叉树,遍历一个节点,存一个值,设置cursum和sum,
2、当cursum==sum且是叶子节点,打印vector中的值
3、否则不是叶子节点,递归遍历左子树、遍历右子树,都不成立,pop容器的值
void FindPath(BiTreeNode* T,int sum)
{
if(T == NULL)
return;
vector<int> ivec;
int cursum=0;
FindPath(T,sum, cursum,ivec);
}
void FindPath(BiTreeNode*T,int sum, int cursum,vector<int> &ivec)
{
cursum + =T->data;
ivec.push(T->data);
//先看是否叶子节点
//如果是叶子节点,且cursum == sum的,输出路径
bool isLeaf = T->lchild == NULL&&T->rchild == NULL;
if(isLeaf&&(cursum == sum))
{
vectro<int>::iterator iter = ivec.begin();
for(;iter!=ivec.end();iter++)
cout << *iter ;
}
//如果不是叶子节点,就递归遍历左子树,右子树
if(T->lchild != NULL)
FindPath(T->lchild,sum,cursum,ivec);
if(T->rchild != NULL)
FindPath(T->rchild,sum,cursum,ivec);
//遍历到最后也不满足,返回父节点
ivec.pop_back();
}
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
本文介绍了一种用于查找二叉树中满足特定条件路径的算法。该算法通过递归方式遍历二叉树,利用vector容器记录路径上的节点值,并在遇到叶子节点时检查路径总和是否等于预设值,若相等则输出该路径。
544

被折叠的 条评论
为什么被折叠?



