注册 登录
编程论坛 数据结构与算法

求教 关于将二叉树顺序存储转化为链式存储

whdugh 发布于 2013-03-15 20:00, 655 次点击
程序代码:
#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 编辑 ]
1 回复
#2
whdugh2013-03-18 09:36
话说这贴没有人么
1