#include <stdio.h>
#include <stdlib.h>
#define Max 10
typedef int ElemType;
typedef struct BiTNode //樹的結構
{
ElemType data;
struct BiTNode *lchild,*rchild;
int ltag,rtag;
}BiTNode,*BiTree;
BiTree pre=NULL;
void BaseData(char **s) //創造陣列
{
char *q;
int i;
printf("請輸入你想輸入的資料長度,若長度超限就截取長度對應部分的字符.\n");
scanf("%d",&i);
q=(char *)malloc(sizeof(char)*i);
printf("請輸入你的字符:\n");
scanf("%s",q);
*s=q;
q[i]='\0';
}
void CreateTree(BiTree *t,char *s) //利用陣列生成樹
{
BiTree stack[Max],p=NULL;
int top=-1,k,j=0;
char ch;
*t=NULL;
ch=s[j];
while(ch!='\0')
{
switch(ch)
{
case '(':
stack[++top]=p;
k=1;
break;
case ')':
top--;
break;
case ',':
k=2;
break;
default :
p=(BiTree )malloc(sizeof(BiTNode));
p->data=https://bbs.csdn.net/topics/ch;
p->lchild=p->rchild=NULL;
p->ltag=p->rtag=0;
if(*t==NULL)
*t=p;
else
{
switch(k)
{
case 1:
stack[top]->lchild=p;
break;
case 2:
stack[top]->rchild=p;
break;
}
}
}
ch=s[++j];
}
}
void vist(BiTree p)
{
if(p!=NULL)
{
printf("當前的節點是:\n");
printf("%c",p->data);
printf("\n");
}
}
void ZXBL(BiTree p) //中序遍歷二叉樹
{
if(p==NULL)
return;
ZXBL(p->lchild);
vist(p);
ZXBL(p->rchild);
}
void ZXXSBL(BiTree *p) //中序線索化二叉樹程序 : 1
{
printf("**********\n"); //A(B(D(,G)),C(E,F))
//printf("%c\n",(*p)->data); //測驗代碼段
if((*p)!=NULL)
{
ZXXSBL(&((*p)->lchild));
printf("@@@@@@@@@@@@@@\n");
if((*p)->lchild==NULL)
{
(*p)->lchild=(pre);
(*p)->ltag=1;
}
if((pre)->rchild==NULL&&(pre)!=NULL)
{
(pre)->rchild=(*p);
(pre)->rtag=1;
}
(pre)=(*p);
ZXXSBL(&(*p)->rchild);
}
}
void main()
{
char *s;
BiTree tree;
BaseData(&s);
CreateTree(&tree,s);
ZXXSBL(&tree); //線索化二叉樹
printf("線索化完成.\n");
//XXBL(tree);
}
//A(B(D(,G)),C(E,F))
/*
這個是線索二叉樹的遞回建立,但是好像遞回失敗了。。。為什么啊
測驗資料
長度:18
字符陣列:A(B(D(,G)),C(E,F))
*/
uj5u.com熱心網友回復:

求救求救
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72838.html
標籤:C語言
上一篇:devc++ [Error] ld returned 1 exit status怎么解決
下一篇:C++小問題
