#2
whdugh2013-03-18 09:36
|
程序代码:
#include<iostream>
#include<stack>
using namespace std;
struct node {
int data;
node* lchild, *rchild;
};
int A[100];
void create() //dgh 这里是用栈将数组的元素和二叉树中的联系起来吗?怎么感觉麻烦
{
int n;
cout << "输入结点个数:" << endl;
int a[100];
cin >> n;
cout << "输入结点:";
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int j = 0;
int b = 0;
stack<int>s;
while (b < n || (!s.empty())) {
while (b < n) {
A[j] = a[b];
s.push(b);
j = j + 1;
b = b * 2 + 1;
}
if (!s.empty()) {
b = s.top();
s.pop();
b = b * 2 + 2; // dgh 第1次执行完while(),这里的b=1,则b=b*2+2=3
}
}
}
int k = 0;
node* c(void) //建立二叉树链表
{
node* p;
int ch;
ch = A[k];
k++;
if (ch == 0)
return NULL;
else {
p = new node;
p->data = ch;
p->lchild = c();
p->rchild = c();
return p;
}
}
void print(node* p) //先序遍历输出二叉树
{
if (p != NULL) {
cout << p->data << " ";
print(p->lchild);
print(p->rchild);
}
}
int main() //主函数
{
node* s;
create();
s = c();
print(s);
return 0;
}
1. creat()函数没有看懂啊 有何用处 栈将数组的元素和二叉树中的联系起来吗 ?为什么要这么麻烦 #include<stack>
using namespace std;
struct node {
int data;
node* lchild, *rchild;
};
int A[100];
void create() //dgh 这里是用栈将数组的元素和二叉树中的联系起来吗?怎么感觉麻烦
{
int n;
cout << "输入结点个数:" << endl;
int a[100];
cin >> n;
cout << "输入结点:";
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int j = 0;
int b = 0;
stack<int>s;
while (b < n || (!s.empty())) {
while (b < n) {
A[j] = a[b];
s.push(b);
j = j + 1;
b = b * 2 + 1;
}
if (!s.empty()) {
b = s.top();
s.pop();
b = b * 2 + 2; // dgh 第1次执行完while(),这里的b=1,则b=b*2+2=3
}
}
}
int k = 0;
node* c(void) //建立二叉树链表
{
node* p;
int ch;
ch = A[k];
k++;
if (ch == 0)
return NULL;
else {
p = new node;
p->data = ch;
p->lchild = c();
p->rchild = c();
return p;
}
}
void print(node* p) //先序遍历输出二叉树
{
if (p != NULL) {
cout << p->data << " ";
print(p->lchild);
print(p->rchild);
}
}
int main() //主函数
{
node* s;
create();
s = c();
print(s);
return 0;
}
2. creat()没有返回值 ,怎么能把赋给p->lchild?而且运行结果还是对的呢 ?
本人自学数据结构 还望大神指点
[ 本帖最后由 whdugh 于 2013-3-15 20:04 编辑 ]