输入一颗二叉树,从根节点到叶子节点的所有节点构成一条路径,打印出和与输入整数相等的所有路径#include <vector> //思路很简单,遍历所有路径 void getPath(struct treeNode* node, int sum, vector<int>& stack, int currentSum) { //stack用来存放路径 if (node == NULL) return; currentSum += node->id; //先把当前节点入栈 stack.push_back(node->id); if (node->lchild != NULL) getPath(node->lchild, sum, stack, currentSum); if (node->rchild != NULL) getPath(node->rchild, sum, stack, currentSum); if (node->lchild == NULL && node->rchild == NULL) { //如果到达叶子节点 if (currentSum == sum) { vector<int>::iterator it = stack.begin(); for (; it != stack.end(); ++it) printf("%d ", *it); printf("/n"); } } stack.pop_back(); //在返回的时候记得要弹出当前节点,这里不用currentSum += node->id,因为采用的是值传递,本函数内并没有修改调用函数的currenSum } int main() { struct treeNode *root = (struct treeNode*)malloc(sizeof(struct treeNode)); root->id = 10; root->lchild = root->rchild = NULL; insert(root, 5); insert(root, 12); insert(root, 4); insert(root, 7); class vector<int> stack; getPath(root, 22, stack, 0); //这里偷懒没有free掉开辟的内存空间 return 0; }