C语言实现:求给定二叉树中一条最长的路径,并输出此路径上各结点的值。
时间: 2024-12-06 07:25:01 浏览: 31
在C语言中,找到二叉树中长度最长的路径并输出其节点值可以采用深度优先搜索(DFS)结合动态规划的方式。这里我们假设路径是指从根节点到任意节点的路径,包括节点本身和它的直接子节点。以下是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
char visited; // 记录节点是否已访问过
} TreeNode;
// 动态存储最大路径长度和路径数组
int maxLen = 0;
char path[100];
// 帮助函数,用于查找最长路径
void findLongestPath(TreeNode* node, char path[], int len, int index) {
if (!node) return;
node->visited = '1'; // 标记为已访问
if (len > maxLen) { // 更新最大路径长度
maxLen = len;
strncat(path, " ", sizeof(path));
path[index++] = node->val + '0'; // 将节点值转换为字符形式并加入路径字符串
}
if (node->left && node->left->visited == '0') {
findLongestPath(node->left, path, len + 1, index);
}
if (node->right && node->right->visited == '0') {
findLongestPath(node->right, path, len + 1, index);
}
node->visited = '0'; // 回溯,恢复节点状态
}
int main() {
TreeNode *root = // 初始化你的二叉树...
// ...
findLongestPath(root, path, 0, 0); // 从根开始查找
// 输出结果
for (int i = maxLen; i >= 0; i--) {
printf("%d", path[i]);
}
printf("\n");
return 0;
}
```
阅读全文