已知二叉树采用二叉链表存储,设计算法以输出二叉树从根结点到每个叶子结点的路径。
#include <stdio.h>
#include <stdlib.h>
#define maxsize 20
typedef struct Node
{
char data;
struct Node *lchild,*rchild;
}Node,*BiTree;
int CreateBiTree(BiTree *T);
void OutputPath(BiTree T,BiTree *Q,int pos);
int main()
{
BiTree *T;
T=(BiTree *)malloc(sizeof(BiTree));
CreateBiTree(T);
BiTree Q[maxsize];
OutputPath(*T,Q,0);
return 0;
}
int CreateBiTree(BiTree *T)
{
fflush(stdin);
printf("please input the node data:");
char ch;
scanf("%c",&ch);
*T=(BiTree)malloc(sizeof(Node));
(*T)->data=ch;
char c;
fflush(stdin);
printf("Dose %c has leftchild(y--yes,n--no):",ch);
scanf("%c",&c);
if(c=='y')
CreateBiTree(&(*T)->lchild);
else
(*T)->lchild=NULL;
fflush(stdin);
printf("Dose %c has rightchild(y--yes,n--no):",ch);
scanf("%c",&c);
if(c=='y')
CreateBiTree(&(*T)->rchild);
else
(*T)->rchild=NULL;
return 0;
}
void OutputPath(BiTree T,BiTree *Q,int pos)
{
Q[pos]=T;
BiTree t;
t=Q[pos];
if(!t->lchild && !t->rchild)
{
int i;
for(i=0;i<=pos;i++)
{
printf("%c ",Q[i]->data);
}
printf("\n");
}
else
{
if(t->lchild)
OutputPath(t->lchild,Q,pos+1);
if(t->rchild)
OutputPath(t->rchild,Q,pos+1);
}
}