您的位置:首页 > 其它

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

2014-08-21 15:53 323 查看
题目要求如下:



#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;
}

运行结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: