用递归的方法,以二叉链表表示二叉树,建立一棵二叉树,输出二叉树的后序遍历结果
时间: 2024-01-23 20:48:19 浏览: 67
用递归算法实现的二叉树的遍历
5星 · 资源好评率100%
我们可以先定义一个二叉树的结构体:
```c++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
```
接下来,以递归方式构建一棵二叉树。我们可以定义一个递归函数,该函数接收一个指向指针的指针,以便在递归过程中添加新节点。在每个递归函数调用中,我们检查当前字符是左括号还是右括号。如果是左括号,我们将当前节点的左子树设置为递归创建的子树。如果是右括号,我们将当前节点的右子树设置为递归创建的子树。
```c++
void buildTree(TreeNode*& root) {
char c;
cin >> c;
if (c == '#') {
root = NULL;
} else {
root = new TreeNode(c - '0');
buildTree(root->left);
buildTree(root->right);
}
}
```
最后,我们可以使用后序遍历输出二叉树的节点值:
```c++
void postorderTraversal(TreeNode* root) {
if (root != NULL) {
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->val << " ";
}
}
```
完整代码如下:
```c++
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void buildTree(TreeNode*& root) {
char c;
cin >> c;
if (c == '#') {
root = NULL;
} else {
root = new TreeNode(c - '0');
buildTree(root->left);
buildTree(root->right);
}
}
void postorderTraversal(TreeNode* root) {
if (root != NULL) {
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->val << " ";
}
}
int main() {
TreeNode* root;
buildTree(root);
postorderTraversal(root);
cout << endl;
return 0;
}
```
阅读全文