VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 712|回复: 4

望高手高手高手高手高手高手高手高手高手指正

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-5 17:00:01 | 显示全部楼层 |阅读模式
//二叉树的二叉线索存储表示
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#define NULL 0
#define OVERFLOW  -1
#define OK 1
#define ERROR 0
typedef enum PointerTag{Link=0, Thread};
typedef char TElemType;

typedef char Status ;



typedef struct BiThrNode{
        TElemType data;
        struct BiThrNode *lchild, *rchild;
        PointerTag LTag, RTag;
}BiThrNode, *BiTree;

BiTree CreateBiTree()
{
  TElemType ch;
  BiTree  T;
  scanf("%c",&ch);
  if(ch=='#')
     T=NULL;
  else{
      T=(BiTree)malloc(sizeof(BiThrNode));

      T->data=ch;
     T->lchild=CreateBiTree();   //这是中许建立?
      T->rchild=CreateBiTree();
    }
  return T;
  }


void InThreading(BiTree p){
        if(p){
                BiTree pre=NULL;
                pre->LTag=Link;
                pre->RTag=Thread;
                pre->rchild=pre;
                if(!p)pre->lchild=pre;
                else pre->lchild=p;
                InThreading(p->lchild);
                if(!p->lchild){p->LTag=Thread; p->lchild=pre;}
                if(!pre->rchild){pre->RTag=Thread; pre->rchild=p;}
                pre=p;
                InThreading(p->rchild);
        }
}



Status InOrderThreading(BiTree &Thrt, BiTree T){
        //中序遍历二差树,并将其中序线索化,Thrt指向头结点
       
        Thrt->LTag=Link;
        Thrt->RTag=Thread;
        Thrt->rchild=Thrt;
        if(!T)Thrt->lchild=Thrt;
        else{
                BiTree pre;
                Thrt->lchild=T;
                pre=Thrt;
                InThreading(T);
                pre->rchild=Thrt;//最后一个结点线索化
                pre->RTag=Thread;
                Thrt->rchild=pre;
        }
        return OK;
}



//遍历
Status InOrderTraverse(BiTree T, Status (*Visit)(TElemType e)){
        BiThrNode *p;
        p=T->lchild;
        while(p!=T){
                while(p->LTag==Link)p=p->lchild;
                if(!Visit(p->data)) return ERROR;
                while(p->RTag==Thread&&p->rchild!=T){
                        p=p->rchild;
                        Visit(p->data);
                }
                p=p->rchild;
        }
        return OK;
}
Status Visit(TElemType e){
        cout<<e;
        return e;
}

void main(){
        BiTree Thrt, t;
        if(!(Thrt = (BiTree)malloc(sizeof(BiThrNode)))) exit (OVERFLOW);
        cout<<"a";
        t=CreateBiTree();
//        InOrderThreading(Thrt, t);
        cout<<"jdiue";
        InOrderTraverse(t,Visit);
}
回复

使用道具 举报

0

主题

9

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-1-6 02:27:01 | 显示全部楼层
你先把你的问题说出来,没时间仔细研究
回复

使用道具 举报

0

主题

36

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-1-8 10:00:01 | 显示全部楼层
说出问题,我们才能解决问题
回复

使用道具 举报

0

主题

19

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-1-9 11:54:01 | 显示全部楼层
没有调试么??/
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-11 12:45:01 | 显示全部楼层
算法有标准库的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表