怎么用C++输出二叉树中从每个叶子结点到根节点的路径
时间: 2024-05-09 12:01:35 浏览: 146
以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void printPath(vector<int> path) {
for (int i = path.size() - 1; i >= 0; i--) {
cout << path[i] << " ";
}
cout << endl;
}
void dfs(TreeNode* root, vector<int>& path) {
if (!root) return;
path.push_back(root->val);
if (!root->left && !root->right) {
printPath(path);
} else {
dfs(root->left, path);
dfs(root->right, path);
}
path.pop_back();
}
void printPaths(TreeNode* root) {
vector<int> path;
dfs(root, 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);
printPaths(root);
return 0;
}
```
其中,`printPath`函数用于输出一条路径,`dfs`函数是实现深度优先遍历的递归函数,`printPaths`函数则是调用`dfs`函数,并传入空路径`vector`。在`dfs`函数中,如果当前节点为叶子节点,就输出路径;如果不是,则继续递归遍历左子树和右子树,每次递归结束后要弹出路径中的最后一个节点。最后,在`main`函数中创建一棵二叉树,并调用`printPaths`函数输出所有从叶子节点到根节点的路径。
阅读全文