| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 919 人关注过本帖
标题:自己编的:把二叉树顺序存储转换为链式存储后,先序遍历出错。
只看楼主 加入收藏
mhchen2010
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-12-25
结帖率:0
收藏
 问题点数:0 回复次数:3 
自己编的:把二叉树顺序存储转换为链式存储后,先序遍历出错。
#include<stdio.h>
 #include<stdlib.h>
 typedef struct node
 {
   node *lchild;
   node *rchild;
   char data;
 }node1;
 void lb(node *&q,char a[100],int n)
 {
                                           /*
                                            printf("%c01");
                                            node *q;
                                            printf("%c02");
                                            b=q; //b的孩子指向q
                                            printf("%c03");
                                            */
                                           //printf("%c",a[n]);
      if(a[n]=='\0')
      {
        printf("__NULL04..");        //孩子结点不存在值的置为NULL
        q=NULL;
      }
      else
      {
           printf("%c_\n",a[n]);
          q=(node *)malloc(sizeof(node));
                                                                          //q->lchild=q->rchild=NULL;
                                                                        // printf("%c04");
          q->data=a[n];
                                                                     //b->lchild=
          lb(q->lchild,a,2*n);

                                                                   //printf("04_");
          lb(q->rchild,a,2*n+1);

      }
 }
 void fir(node *b)
 {
   if(b!=NULL)
    {
     printf("%c",b->data);
    fir(b->lchild);
    fir(b->rchild);
    }
 }
 int main()
 {
      node1 *h,*p;
      char a[100]={'a','a','b','c','d','e','f'};
      p=(node *)malloc(sizeof(node));
     // p->lchild=p->rchild=NULL;
      p->data=a[1];
      h=p;
        printf("\n");
      lb(p,a,1);
        printf("\n");
       h=h->lchild;                   //h是之前赋予的头结点,左孩子是乱码,照理说应该是'b'.
       printf("\n%c",h->data);
      fir(h);                               //用先序遍历。不返回任何数值,应该是abcdef.
 }
搜索更多相关主题的帖子: 存储 include 二叉树 
2013-05-19 12:04
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
int main()
{
    node1 *h, *p = NULL;
    char a[100]={'\0', 'a', 'b', 'c', 'd', 'e', 'f'};
//    p=(node *)malloc(sizeof(node));
    printf("\n");
    lb(p, a, 1);
    h = p;                //你的lb函数第一个参数是 node *&q, &表示q值会被改变
    printf("\n");
    h = h->lchild;                  
    printf("\n%c\n", h->data);
    fir(p);                //遍历整个树,应该是 fir(p),因为 h = h->lchild;
    return 0;
}


[fly]存在即是合理[/fly]
2013-05-19 12:29
mhchen2010
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-12-25
收藏
得分:0 
回复 2楼 azzbcc
谢谢,同时问下,这个"*&q"格式没理解透,如果以"node *q"运行,系统报错“内存不能为read”。
这个"&"是对p=(node *)malloc(sizeof(node))新建空间节点的允许吗?还有什么作用?

2013-05-19 15:23
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
&是C++的引用,具体可以百度一下

说明一下,C语言不支持 引用


[fly]存在即是合理[/fly]
2013-05-19 17:08
快速回复:自己编的:把二叉树顺序存储转换为链式存储后,先序遍历出错。
数据加载中...
 
   



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

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