题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数22和如下二元树
10
/ \
5 12
/ \ / \
4 7 11 14
则打印出两条路径:10, 12和10, 5, 7。
void find_path(BiTree *T, int &expected_sum, vector<int> &path, int ¤t_sum) {
if(!T)
return;
current_sum += T->data;
path.push_back(T->data);
bool is_leaf = (!T->lchild) && (!T->rchild);
if(is_leaf&& (current_sum == expected_sum)) {
vector<int>::iterator it;
for(it = path.begin(); it != path.end(); it++)
cout << *it << " ";
cout << endl;
}
if(T->lchild)
find_path(T->lchild, expected_sum, path, current_sum);
if(T->rchild)
find_path(T->rchild, expected_sum, path, current_sum);
current_sum -= T->data;
path.pop_back();
}