| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 572 人关注过本帖
标题:(线索化二叉树)小弟根据数据结构书上的改了。为什么还是会出赋值失败。应 ...
只看楼主 加入收藏
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
结帖率:94.44%
收藏
 问题点数:0 回复次数:0 
(线索化二叉树)小弟根据数据结构书上的改了。为什么还是会出赋值失败。应该是指针问题。麻烦大神给于小弟解说。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef enum {Link,Prik} Order;
typedef struct node
{
    struct node *Lchild;
    struct node *Rchild;
    Order Rchd,Lchd;
    char ch;
}Node, *Base;
Base per;
void prit(Base T);
void Creat(Node **T);
void Insertding(Node **T,Base *Ther);
void Insert(Node **T);
void do_prit(Node **T);
void main()
{
    Base T=NULL,Ther = NULL;
    Creat(&T);
    prit(T);
    Insertding(&T,&Ther);
    do_prit(&Ther);
}
void Creat(Node **T)
{
    char ch;
    scanf(" %c",&ch);
    if(ch == '0')
        *T = NULL;
    else
    {
        *T = (Node *)malloc(sizeof(Node));
        assert((*T));
        (*T)->ch = ch;
        (*T)->Lchd = Link;
        (*T)->Rchd = Link;
        (*T)->Lchild = (*T)->Rchild = NULL;
        Creat(&(*T)->Lchild);
        Creat(&(*T)->Rchild);
    }
}
void prit(Node *T)
{
    if(T!=NULL)
    {
        prit(T->Lchild);
        printf("%c",T->ch);
        prit(T->Rchild);
    }
}
void Insertding(Node **T,Base *Ther)
{
    *Ther =(Base)malloc(sizeof(Node));
    assert(*Ther);
    (*Ther)->Lchd = Link;
    (*Ther)->Rchd = Prik;
//    (*Ther)->Rchild = *Ther;
    if(*T)
    {
        (*Ther)->Lchild = *T;
        per = *Ther;
        Insert(&(*T));
        per->Rchd = Prik;
        per->Rchild = *Ther;
        (*Ther)->Rchild = per;
    }
    else
    {
        (*Ther)->Lchild =*Ther;
    }
}
void Insert(Node **T)             //线索化
{
    if(*T)
    {
        Insert(&(*T)->Lchild);
        if(!(*T)->Lchild)
        {
            printf("%c",(*T)->ch);
            (*T)->Lchd = Prik;              //这个已经调试过赋值是成功的。
            (*T)->Lchild = per;
        }
        if(!per->Rchild)
        {
            per->Rchd = Prik;
            per->Rchild = *T;                                                
        }
        per = *T;
        Insert(&(*T)->Rchild);
    }
}
void do_prit(Node **T)
{
    Base p= NULL;
    p = (*T)->Lchild;
    while(p!=*T)
    {
        while(p->Lchd == Prik)
            p = p->Lchild;
        printf("name=%5c",p->ch);
        printf("ss=%5d",p->Lchd);
        printf("%p",p);
        while(p->Rchd == Prik && p->Rchild !=*T)      //该p->Rchd 并不为Prik。(1);但是线索函数已经赋值成功了。
        {
            p = p->Rchild;
            printf("%c",p->ch);
            printf("ss%5d",p->Lchd);
        }
        p = p->Rchild;
    }
}
搜索更多相关主题的帖子: 还是 结构 二叉树 
2013-04-10 18:54
快速回复:(线索化二叉树)小弟根据数据结构书上的改了。为什么还是会出赋值失败 ...
数据加载中...
 
   



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

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