使用链接存储作为二叉树的存储结构。设计一种算法来找到二进制树中第一个最长路径的长度,并输出该路径上每个节点的值。用c++编写
时间: 2024-02-11 20:07:02 浏览: 57
同样采用深度优先搜索(DFS)算法,具体步骤如下:
1. 定义一个全局变量 max_length,表示最长路径的长度。
2. 定义一个 vector path,用于存储当前路径上的节点。
3. 从根节点开始进行 DFS,遍历每个节点。
4. 对于当前节点,将其添加到 path 列表中。
5. 如果当前节点是叶子节点,比较 path 列表的长度和 max_length 的大小,更新 max_length 的值。
6. 如果当前节点不是叶子节点,则继续递归遍历其左右子树。
7. 遍历完当前节点的左右子树后,将当前节点从 path 列表中删除,回溯到其父节点。
8. 最后输出 path 列表中的节点值,即为最长路径上的节点。
下面是 C++ 代码实现:
```c++
int max_length = 0;
vector<int> path;
void find_longest_path(TreeNode* root) {
if (!root) {
return;
}
path.push_back(root->val);
if (!root->left && !root->right) {
if (path.size() > max_length) {
max_length = path.size();
for (int i = 0; i < path.size(); i++) {
cout << path[i] << " ";
}
cout << endl;
}
} else {
find_longest_path(root->left);
find_longest_path(root->right);
}
path.pop_back();
}
```
其中,TreeNode 表示二叉树的节点,val 表示节点的值。
阅读全文