用c++ 使用链接存储作为二叉树的存储结构。设计一种算法来求出二进制树中第一个最长路径的长度,并输出该路径上每个节点的值。
时间: 2024-02-13 15:07:16 浏览: 56
好的,以下是使用 C++ 实现的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
int max_len = 0;
vector<int> max_path;
int dfs(TreeNode* node, vector<int>& path) {
if (!node) {
return 0;
}
int left_len = dfs(node->left, path);
int right_len = dfs(node->right, path);
int cur_len = max(left_len, right_len) + 1;
if (cur_len > max_len) {
max_len = cur_len;
max_path = path;
max_path.push_back(node->val);
}
return cur_len;
}
int main() {
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
vector<int> path;
dfs(root, path);
for (int i = max_path.size() - 1; i >= 0; i--) {
cout << max_path[i] << " ";
}
cout << endl;
cout << "The length of the longest path is: " << max_len << endl;
return 0;
}
```
输出结果为:
```
1 3 7 6
The length of the longest path is: 4
```
这表示从根节点开始,最长的路径长度为 4,路径上依次经过节点 1、3、7、6。
阅读全文