C++语言中实现二叉树从指定节点到根节点的路径
时间: 2023-06-27 11:06:05 浏览: 127
实现二叉树从指定节点到根节点的路径,可以通过递归实现。具体实现步骤如下:
1. 定义二叉树节点结构体,包含左右子节点指针和节点值。
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
2. 定义函数 `pathToRoot`,接收一个指向二叉树节点的指针,返回从该节点到根节点的路径。
```cpp
vector<int> pathToRoot(TreeNode* node);
```
3. 在函数内部实现递归操作,如果当前节点不为空,则将当前节点的值加入结果数组,然后递归遍历该节点的父节点,直到遍历到根节点停止。
```cpp
vector<int> pathToRoot(TreeNode* node) {
vector<int> res;
if (node) {
res.push_back(node->val);
vector<int> parent = pathToRoot(node->parent);
res.insert(res.end(), parent.begin(), parent.end());
}
return res;
}
```
完整代码如下:
```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) {}
};
vector<int> pathToRoot(TreeNode* node) {
vector<int> res;
if (node) {
res.push_back(node->val);
vector<int> parent = pathToRoot(node->parent);
res.insert(res.end(), parent.begin(), parent.end());
}
return res;
}
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 = pathToRoot(root->left->right);
for (int i = 0; i < path.size(); i++) {
cout << path[i] << " ";
}
cout << endl;
return 0;
}
```
输出结果为: `5 2 1`,表示从节点 5 到根节点 1 的路径。
阅读全文