二叉树(五)二叉树中某一路径之和为某一整数

来源:互联网 发布:proe软件 编辑:程序博客网 时间:2024/05/21 08:46

思路:

对于二叉树中的某一节点,

如果是叶子节点,将其加入到path中,(一个vector)然后算vector中的和是否为需要的整数,如果是就打印出来,如果和不满足就退出函数,退出前pop vector;

如果不是叶子节点,直接将当前值加入到path中,再递归调用,当前节点变为当前节点的左节点,右节点

本函数的关键是在退出函数前要pop一次,(如果在该函数中push了);这样保证在递归调用结束的时候会一层一层的收缩

 

void BinSum(int sum,vector<int> &path,Node *cur){if (cur==NULL){return;}if(cur->left==NULL&&cur->right==NULL){path.push_back(cur->val);int Tempsum=vsum(path);if (Tempsum==sum){vprint(path);}}else{path.push_back(cur->val);BinSum(sum,path,cur->left);BinSum(sum,path,cur->right);}path.pop_back();}int vsum(vector<int> &path){int sum=0;for (int i=0;i<path.size();i++){sum+=path[i];}return sum;}void vprint(vector<int> &path){for(int i=0;i<path.size();i++)cout<<path[i]<<'\t';cout<<endl;}


 

 

0 0