二叉树中找出和为给定值得所有路径

来源:互联网 发布:阿甘起源哥谭网络 编辑:程序博客网 时间:2024/04/28 04:37

题目要求如下:


#include<iostream>#include<stdlib.h>#include<deque>using namespace std;struct TreeNode{int data;TreeNode *left;TreeNode *right;};//自定义asiII转int函数int my_atoi(char *p){int number = 0;if(p == NULL){cout<<"字符串为空"<<endl;return 0;}else{//跳过前面的空格while(isspace(*p) != 0)p++;//首先判断正负号bool isNeg = false;if(*p == '-'){isNeg = true;p++;}if(*p == '+')p++;while(*p >= '0' && *p <= '9'){number = number * 10 +(*p - '0');p++;}return isNeg ? -number : number;}}//创建二叉树void createTree(TreeNode *&root){char buffer[10];memset(buffer,0,10);cin.getline(buffer,9);int a = my_atoi (buffer);if(a == 0)root == NULL;else{root = new TreeNode();root -> data = a;root -> left = root -> right = NULL;createTree(root -> left);createTree(root -> right);}}void PrintPath(TreeNode *root, int sum,const int target){static deque<int> stack;if(root == NULL)return;if(sum + root->data == target){for(int i=0;i<stack.size();i++)cout<<stack[i]<<"->";cout<<root->data<<endl;return;}else if(sum + root->data >target){return;}else{stack.push_back(root->data);sum += root->data;PrintPath(root->left,sum,target);PrintPath(root->right,sum,target);sum -=root->data;stack.pop_back();}}int main(){TreeNode *root = NULL;createTree(root);PrintPath(root,0,22);system("pause");return 0;}

运行结果为:


0 0
原创粉丝点击