您的位置:首页 > 其它

笔试题:求二叉树中和值为sum的所有路径

2015-08-31 20:38 323 查看
#include <iostream>
#include <stack>
using namespace std;
struct Node
{
Node *left;
Node *right;
int data;
Node(int d = int()) :data(d), left(NULL), right(NULL){}
};

class DataTree
{
public:
DataTree():root(NULL){}
void Create_Tree(int VLR[],int LVR[],int n)
{
Create_Tree(root,VLR,LVR,n);//由数组的前序跟中序构造二叉树。
}
void Printf()
{
Printf(root);
}
void Printf(Node *t)
{
if (t != NULL)
{
cout << t->data << " ";
Printf(t->left);
Printf(t->right);
}
}
void GetSum(int sum)//求取和值为sum的所有路径.
{
//这里如果要保存,要用到栈。
stack<int> st;
GetSum(st, root, sum);
}
private:
void GetSum(stack<int> &st, Node *t, int sum)
{
if (t == NULL)
{
if (sum == 0)
{
stack<int> temp = st;
while (temp.empty() == false)
{
cout << temp.top() << endl;
temp.pop();
}
}
return ;
}
else
{
sum -= t->data;
st.push(t->data);
GetSum(st,t->left,sum);

if (t->right!=NULL)
GetSum(st,t->right,sum);
st.pop();
}
}
void Create_Tree(Node *&t,int VLR[],int LVR[],int n)
{
if (n == 0)return;
int i = 0;
while (VLR[0] != LVR[i])i++;
t = new Node(VLR[0]);
Create_Tree(t->left,VLR+1,LVR,i);
Create_Tree(t->right,VLR+i+1,LVR+i+1,n-i-1);
}
private:
Node *root;
};
int main()
{
int VLR[] = {1,2,3,4,5,6,7};
int LVR[] = {3,2,4,1,6,5,7};
DataTree dt;
dt.Create_Tree(VLR,LVR,sizeof(LVR)/sizeof(int));
dt.GetSum(13);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: