二叉树中找出和为给定值得所有路径
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;
}
运行结果为:
#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;
}
运行结果为:
相关文章推荐
- 给定一棵二叉树,二叉树每个节点的值唯一,从根节点开始找出路径上的所有节点的节点值之和等于规定值的路径
- 找出二叉树中所有累加值为给定值的路径
- 【二叉树的递归】04找出二叉树中路径和等于给定值的所有路径【Path Sum II】
- 在二叉树中找出和为某值的所有路径
- 华为机试题之在二叉树中找出和为某一值的所有路径(java语言)
- 在二叉树中找出和为某一值的所有路径
- Tree-----找出和等于给定数字的所有路径(113. Path Sum II)
- 在二叉树中找出和为某一值的所有路径
- 微软面试100题系列---在二叉树中找出和为某一定值的所有路径
- 找出二叉树中满足某种条件的所有路径
- 给定一棵二叉树,和一个数值。求二叉树的路径和等于给定值的所有路径
- [面试题]在二叉树中找出和为某一值的所有路径
- 【31】给定一个二叉树打印出所有从根结点到叶子结点路径和为 k 的路径
- 二叉树中找出和为某一值的所有路径
- C语言实现找出二叉树中某个值的所有路径的方法
- 找出二叉树中满足某种条件的所有路径
- 二叉树中找出和为某一值的所有路径
- 找出二叉树所有到叶子节点的路径
- 在二叉树中找出和为某一值的所有路径
- 找出二叉树中和为某值的所有路径