#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int maxn = 100;
struct Node
{
int data;
Node *lchild, *rchild, *parent;
};
Node *head, node[maxn];
int cnt = 0;
void Init()
{
head = NULL;
memset(node, '\0', sizeof(node));
}
void miniTree(Node* &head, Node *parent, int a[], int lower, int upper)
{
if(lower <= upper)
{
int mid = (lower + upper) >> 1;
node[cnt].data = a[mid];
node[cnt].parent = parent;
head = &node[cnt++]; //key
miniTree(head->lchild, head, a, lower, mid - 1);
miniTree(head->rchild, head, a, mid + 1, upper);
}
}
vector<Node*> v;
int nn = 0;
void print()
{
cout << ++nn << "list: ";
Node *t;
for (vector<Node*>::iterator iter = v.begin(); iter != v.end(); ++iter)
{
t = *iter;
cout << t->data << " ";
}
cout << endl;
}
void dfs(Node *head, int val)
{
int left = val - head->data;
if(left == 0)
{
print();
return;
}
else if(left < 0)
{
return;
}
else
{
if(head->parent)
{
v.push_back(head->parent);
dfs(head->parent, left);
v.pop_back();
}
if(head->lchild)
{
v.push_back(head->lchild);
dfs(head->lchild, left);
v.pop_back();
}
if(head->rchild)
{
v.push_back(head->rchild);
dfs(head->rchild, left);
v.pop_back();
}
}
}
int main(void)
{
Init();
int a[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
int len = sizeof(a) / sizeof(int);
miniTree(head, NULL, a, 0, len - 1);
for (int i = 0; i < len; ++i)
{
v.push_back(&node[i]);
dfs(&node[i], 5);
v.clear();
}
return 0;
}
Q4.8
最新推荐文章于 2025-06-15 20:42:23 发布