| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 655 人关注过本帖
标题:求教 关于将二叉树顺序存储转化为链式存储
只看楼主 加入收藏
whdugh
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-10-9
收藏
 问题点数:0 回复次数:1 
求教 关于将二叉树顺序存储转化为链式存储
程序代码:
#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 编辑 ]
搜索更多相关主题的帖子: 二叉树 元素 
2013-03-15 20:00
whdugh
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-10-9
收藏
得分:0 
话说这贴没有人么
2013-03-18 09:36
快速回复:求教 关于将二叉树顺序存储转化为链式存储
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024834 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved