#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
struct TreeNode {
struct TreeNode *lchild;
int info;
struct TreeNode *rchild;
};
// 打印路径的辅助函数
void printPath(int path[], int pathLength) {
for (int i = 0; i < pathLength; i++) {
printf("%d -> ", path[i]);
}
printf("NULL\n");
}
// 打印根到叶子节点的所有路径
void printAllPaths(struct TreeNode *root, int path[], int pathLength) {
if (root == NULL) {
return;
}
// 将当前节点添加到路径中
path[pathLength] = root->info;
pathLength++;
// 如果是叶子节点,打印路径
if (root->lchild == NULL && root->rchild == NULL) {
printPath(path, pathLength);
} else {
// 否则,递归遍历左子树和右子树
printAllPaths(root->lchild, path, pathLength);
printAllPaths(root->rchild, path, pathLength);
}
}
int main() {
// 创建一个示例二叉树
struct TreeNode *bt = (struct TreeNode *)malloc(sizeof(struct TreeNode));
bt->info = 1;
bt->lchild = (struct TreeNode *)malloc(sizeof(struct TreeNode));
bt->lchild->info = 2;
bt->lchild->lchild = (struct TreeNode *)malloc(sizeof(struct TreeNode));
bt->lchild->lchild->info = 4;
bt->lchild->lchild->lchild = NULL;
bt->lchild->lchild->rchild = NULL;
bt->lchild->rchild = (struct TreeNode *)malloc(sizeof(struct TreeNode));
bt->lchild->rchild->info = 5;
bt->lchild->rchild->lchild = NULL;
bt->lchild->rchild->rchild = NULL;
bt->rchild = (struct TreeNode *)malloc(sizeof(struct TreeNode));
bt->rchild->info = 3;
bt->rchild->lchild = (struct TreeNode *)malloc(sizeof(struct TreeNode));
bt->rchild->lchild->info = 6;
bt->rchild->lchild->lchild = NULL;
bt->rchild->lchild->rchild = NULL;
bt->rchild->rchild = (struct TreeNode *)malloc(sizeof(struct TreeNode));
bt->rchild->rchild->info = 7;
bt->rchild->rchild->lchild = NULL;
bt->rchild->rchild->rchild = NULL;
int path[100]; // 用于存储路径的数组
printf("所有路径:\n");
printAllPaths(bt, path, 0);
// 释放内存
free(bt->rchild->rchild);
free(bt->rchild->lchild);
free(bt->rchild);
free(bt->lchild->rchild);
free(bt->lchild->lchild);
free(bt->lchild);
free(bt);
return 0;
}