求教 关于将二叉树顺序存储转化为链式存储
程序代码:
#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()函数没有看懂啊 有何用处 栈将数组的元素和二叉树中的联系起来吗 ?为什么要这么麻烦
2. creat()没有返回值 ,怎么能把赋给p->lchild?而且运行结果还是对的呢 ?
本人自学数据结构 还望大神指点
[ 本帖最后由 whdugh 于 2013-3-15 20:04 编辑 ]