题目:输入一个整数和一颗二叉树。从树结点到叶结点经过的结点定义为一条路径。找出路径上所有结点和为该整数的路径并打印出来。
定义二叉树结点为下:
struct BinaryTreeNode{
int value;
BinaryTreeNode* left;
BinaryTreeNode* right;
};
思路:
1.典型递归。
2.设当前结点是p,用整数减去p->value,得到一个值。 如果p是叶结点。并且值为0,那么该路径是存在的。因为子结点无法指向父结点,我们需要一个结构来保存从上到下经过的结点。
代码如下:
struct BinaryTreeNode{
int value;
BinaryTreeNode* left;
BinaryTreeNode* right;
};
void FindPath(BinaryTreeNode* root,int value,vector<int> &vec){
if (root==NULL)
{
return;
}
vec.push_back(root->value);
bool isLeaf = (root->left==NULL)&&(root->right==NULL);
bool isPath = (value==root->value);
if (isLeaf&&isPath)
{
/*
打印整个路径
*/
std::vector<int>::iterator it = vec.begin();
for (;it!=vec.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
else if (!isLeaf)
{
int remainValue = value - root->value;
FindPath(root->left,remainValue,vec);
FindPath(root->right,remainValue,vec);
}
vec.pop_back();
}