数据结构作业,输出二叉树的所有从根节点到叶节点的路径
#include <stdio.h>
#include <stdlib.h>
typedef struct tree
{
char data;
struct tree *lchild,*rchild;
}tree,*Tree;
int inittree(Tree T)
{
T=(Tree)malloc(sizeof(tree));
T->lchild=T->rchild=NULL;
return 1;
}
void createtree(Tree &T)
{
char ch;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else
{
T=(Tree)malloc(sizeof(tree));
T->data=ch;
T->lchild=T->rchild=NULL;
createtree(T->lchild);
createtree(T->rchild);
}
}
typedef struct snode
{
Tree *data;
int top;
}Snode;
int initstack(Snode *S)
{
S->data=(Tree *)malloc(sizeof(Tree)*100);
S->top=0;
return 1;
}
int enstack(Snode *S,Tree e)
{
S->data[S->top]=e;
S->top++;
return 1;
}
Tree destack(Snode *S)
{
Tree e;
e=S->data[S->top-1];
S->top--;
return e;
}
/*输出栈内元素*/
void print(Snode S)
{
int i=0;
while(i<S.top)
{
printf("%c",S.data[i]->data);
i++;
}
}
Snode S;
/*二叉树递归输出所有路径*/
void disptree(Tree T)
{
enstack(&S,T);
if(T->lchild==NULL&&T->rchild==NULL)
{
print(S);
printf("\n");
}
else
{
if(T->lchild) disptree(T->lchild);
if(T->rchild) disptree(T->rchild);
}
destack(&S);
}
/*二叉树根据深度输出所有路径*/
char data[20];
void Disptree(Tree T,int deep)
{
data[deep]=T->data;
if(T->lchild==NULL&&T->rchild==NULL)
{
data[deep+1]='\0';
printf("%s\n",data);
}
if(T->lchild) Disptree(T->lchild,deep+1);
if(T->rchild) Disptree(T->rchild,deep+1);
}
int main()
{
Tree T;
createtree(T);initstack(&S);
disptree(T);
printf("\n");
Disptree(T,0);
return 0;
}