c语言二叉树输出最长路径上的结点
时间: 2023-12-13 17:04:42 浏览: 79
要求输出二叉树中最长路径上的结点,可以通过递归遍历二叉树来实现。具体步骤如下:
1. 定义一个函数,输入参数为二叉树的根节点和一个指向当前最长路径上结点的指针,输出值为最长路径的长度。
2. 在函数中递归遍历左右子树,并分别计算左右子树中最长路径的长度。
3. 将左右子树中最长路径长度的较大值加1,得到当前节点的最长路径长度。
4. 如果当前节点的最长路径长度大于之前的最大值,则更新最大值,并将最长路径上结点的指针指向当前节点。
5. 返回当前节点的最长路径长度。
下面是C语言的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
int maxDepth(TreeNode* root, TreeNode** node) {
if (root == NULL) {
return 0;
}
int leftDepth = maxDepth(root->left, node);
int rightDepth = maxDepth(root->right, node);
int curDepth = leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
if (curDepth > *node) {
*node = root;
}
return curDepth;
}
int main() {
// 构造二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->left->val = 4;
root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
root->left->right->val = 5;
root->right->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->right->val = 6;
TreeNode* node = NULL;
int maxDepth = maxDepth(root, &node);
printf("The longest path length is %d, and the node is %d\n", maxDepth, node->val);
return 0;
}
```
运行结果:
```
The longest path length is 4, and the node is 2
```
阅读全文