c语言求二叉树最长路径并输出结点
时间: 2023-07-02 12:08:32 浏览: 185
下面是一个示例代码,可以求解二叉树的最长路径并输出结点:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结构体
typedef struct Node {
int val;
struct Node* left;
struct Node* right;
} Node;
// 计算树的深度
int depth(Node* root) {
if (root == NULL) {
return 0;
}
int left_depth = depth(root->left);
int right_depth = depth(root->right);
return 1 + (left_depth > right_depth ? left_depth : right_depth);
}
// 打印最长路径
void print_longest_path(Node* root) {
if (root == NULL) {
return;
}
int left_depth = depth(root->left);
int right_depth = depth(root->right);
if (left_depth + right_depth > longest_path) {
longest_path = left_depth + right_depth;
longest_node = root;
}
print_longest_path(root->left);
print_longest_path(root->right);
}
// 测试代码
int main() {
// 创建一棵二叉树
Node* root = (Node*)malloc(sizeof(Node));
root->val = 1;
root->left = (Node*)malloc(sizeof(Node));
root->left->val = 2;
root->left->left = (Node*)malloc(sizeof(Node));
root->left->left->val = 4;
root->left->left->left = NULL;
root->left->left->right = NULL;
root->left->right = NULL;
root->right = (Node*)malloc(sizeof(Node));
root->right->val = 3;
root->right->left = (Node*)malloc(sizeof(Node));
root->right->left->val = 5;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = (Node*)malloc(sizeof(Node));
root->right->right->val = 6;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 计算最长路径并输出结点
print_longest_path(root);
printf("最长路径为:%d-%d-%d\n", longest_node->val, longest_node->left->val, longest_node->right->val);
return 0;
}
```
此代码中,`depth()` 函数用于计算树的深度,`print_longest_path()` 函数用于打印最长路径。在 `print_longest_path()` 函数中,我们首先计算左子树和右子树的深度,如果左子树深度加右子树深度大于当前最长路径,则更新最长路径和最长路径的结点。最后递归遍历左子树和右子树即可。在测试代码中,我们创建了一棵二叉树,并进行了测试。
阅读全文