算法思想:
- 使用递归方法遍历树,从根节点开始。
- 在递归的过程中,将经过的节点添加到一个路径数组中,并维护一个路径长度变量。
- 当遇到叶子节点(没有子节点)时,打印路径数组中的元素,表示找到一条从根到叶子的路径。
- 继续递归遍历树的子节点。
- 重复以上步骤,直到遍历完整个树。
代码:
//孩子兄弟链表法储存结构定义
typedef struct TreeNode {
int data;
TreeNode* firstChild;
TreeNode* nextSibling;
}TreeNode;
//定义一个函数用于输出节点路径
void printPaths(TreeNode* root, int path[], int pathLength) {
if (root == NULL) {
return;
}
// 将当前节点的数据添加到路径中
path[pathLength] = root->data;
pathLength++;
// 如果是叶子节点,打印路径
if (root->firstChild == NULL) {
printf("Path: ");
for (int i = 0; i < pathLength; i++) {
printf("%d ", path[i]);
}
printf("\n");
} else {
// 递归处理孩子节点
printPaths(root->firstChild, path, pathLength);
}
// 递归处理下一个兄弟节点
printPaths(root->nextSibling, path, pathLength);
}