编写递归算法, 输出二叉树中从每个叶子结 点到根结点的路径。用cpp
时间: 2024-12-13 22:14:46 浏览: 8
二叉树遍历 非递归 C++实现代码
5星 · 资源好评率100%
编写递归算法来遍历二叉树并输出从每个叶子节点到根节点的路径,我们可以采用前序遍历(Preorder Traversal),因为前序遍历的第一个元素恰好是当前节点,这有助于构建路径。这里是一个简单的C++示例,假设我们有一个`Node`结构体表示二叉树的节点:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点
struct Node {
int data;
Node* left;
Node* right;
};
// 前序遍历函数,返回当前节点的路径字符串
string pathToRoot(Node* node) {
if (node == nullptr) return "";
string path = to_string(node->data);
if (node->left == nullptr && node->right == nullptr) { // 叶子节点
path = "[" + path + "]"; // 添加方括号作为路径标记
} else {
path += " -> " + pathToRoot(node->left); // 递归左子树
path += " -> " + pathToRoot(node->right); // 递归右子树
}
return path;
}
// 示例:遍历并打印从每个叶子节点到根节点的路径
void printLeafPaths(Node* root) {
if (root == nullptr) return;
cout << "Path from a leaf node to the root: " << pathToRoot(root) << endl;
// 如果有其他叶子节点,继续递归
if (root->left != nullptr) printLeafPaths(root->left);
if (root->right != nullptr) printLeafPaths(root->right);
}
int main() {
// 创建一个简单的二叉树实例
Node* tree = /* 请填写创建二叉树的具体代码 */
// 调用函数开始遍历
printLeafPaths(tree);
return 0;
}
```
在这个代码中,你需要提供具体的二叉树构造代码。然后调用`printLeafPaths`函数会递归地访问所有叶子节点,并打印出它们到根节点的路径。
阅读全文