数据结构作业之输出二叉树的所有从根节点到叶节点的路径

数据结构作业,输出二叉树的所有从根节点到叶节点的路径

#include 
#include 
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;
}

你可能感兴趣的:(数据结构作业)