二叉树采用二叉链结构存储,求出根节点到给定节点的路径用c++
时间: 2024-09-11 11:03:11 浏览: 55
数据结构第六章课件及建立二叉树的二叉链表存储结构汇总
在二叉树的二叉链结构中,每个节点包含三个部分:数据域和两个指向其左右子节点的指针。为了求出根节点到给定节点的路径,我们可以采用递归的方式从根节点开始遍历树,同时记录下当前的路径。如果当前节点为空或者等于目标节点,我们就找到了一条路径。下面是一个使用C++实现的示例代码:
```cpp
#include <iostream>
#include <vector>
// 定义二叉树节点结构
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 函数声明
bool findPath(TreeNode* root, TreeNode* target, std::vector<int>& path);
// 主函数
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);
TreeNode* target = root->left->right; // 我们的目标节点
std::vector<int> path; // 存储路径的向量
if (findPath(root, target, path)) {
std::cout << "Path from root to target is: ";
for (int val : path) {
std::cout << val << " ";
}
std::cout << std::endl;
} else {
std::cout << "No path found from root to target." << std::endl;
}
// 清理分配的内存
delete root->left->left;
delete root->left->right;
delete root->right->left;
delete root->right->right;
delete root->left;
delete root->right;
delete root;
return 0;
}
// 寻找从根节点到目标节点的路径
bool findPath(TreeNode* root, TreeNode* target, std::vector<int>& path) {
if (root == nullptr) {
return false;
}
// 将当前节点添加到路径中
path.push_back(root->val);
// 检查当前节点是否是要找的节点
if (root == target) {
return true;
}
// 递归地在左右子树中查找目标节点
if (findPath(root->left, target, path) || findPath(root->right, target, path)) {
return true;
}
// 如果当前节点不是目标节点,则从路径中移除该节点
path.pop_back();
return false;
}
```
这段代码首先定义了一个二叉树节点的结构,并实现了一个递归函数`findPath`,该函数会寻找从根节点到目标节点的路径,并将其存储在`path`向量中。如果找到了目标节点,则函数返回`true`,并且`path`中会包含一条从根节点到目标节点的路径。如果在树中没有找到目标节点,则返回`false`,并且`path`保持为空。
阅读全文