算法
void AllPath(BiTNode *p, TElemType *data, int len)
{
if (p)
{
if (p->lchild == NULL && p->rchild == NULL)
{
visit(p);
for (int i = len - 1; i >= 0; i--)
printf("%d ", data[i]);
printf("\n");
}
else
{
data[len++] = p->data;
AllPath(p->lchild, data, len);
AllPath(p->rchild, data, len);
}
}
}
完整代码
#include <stdio.h>
#include <stdlib.h>
#define TElemType int
int front = 0, rear = 0;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void CreateBiTree(BiTree *T)
{
*T = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->data = 1;
(*T)->lchild = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->rchild = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->lchild->data = 2;
(*T)->lchild->lchild = NULL;
(*T)->lchild->rchild = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->lchild->rchild->data = 5;
(*T)->lchild->rchild->lchild = NULL;
(*T)->lchild->rchild->rchild = NULL;
(*T)->rchild->data = 3;
(*T)->rchild->lchild = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->rchild->lchild->data = 6;
(*T)->rchild->lchild->lchild = NULL;
(*T)->rchild->lchild->rchild = NULL;
(*T)->rchild->rchild = NULL;
}
void EnQueue(BiTree *a, BiTree node)
{
a[rear++] = node;
}
BiTNode *DeQueue(BiTNode **a)
{
return a[front++];
}
void visit(BiTNode *p)
{
printf("%d ", p->data);
}
void AllPath(BiTNode *p, TElemType *data, int len)
{
if (p)
{
if (p->lchild == NULL && p->rchild == NULL)
{
visit(p);
for (int i = len - 1; i >= 0; i--)
printf("%d ", data[i]);
printf("\n");
}
else
{
data[len++] = p->data;
AllPath(p->lchild, data, len);
AllPath(p->rchild, data, len);
}
}
}
int main()
{
BiTree tree;
CreateBiTree(&tree);
TElemType data[10];
int len = 0;
AllPath(tree, data, len);
return 0;
}