用递归的方法实现以下算法。 (1)以二叉链表表示二叉树,建立一棵二叉树; (2)输出二叉树的后序遍历结果;
时间: 2023-12-01 12:04:06 浏览: 53
好的,我会为您解答这个问题。
以下是用递归的方法实现二叉树的后序遍历算法:
1. 如果二叉树为空,则直接返回。
2. 对二叉树的左子树进行后序遍历。
3. 对二叉树的右子树进行后序遍历。
4. 将根节点加入到遍历结果中。
具体实现代码如下:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def postorder_traversal(root: TreeNode):
if not root:
return []
result = []
result.extend(postorder_traversal(root.left))
result.extend(postorder_traversal(root.right))
result.append(root.val)
return result
```
这样,对于任意一棵二叉树,我们都可以用上述代码来得到它的后序遍历结果。
希望能够帮助您解决问题,如果还有其他问题或者疑惑,请继续和我对话。
相关问题
、用递归的方法实现以下算法。 使用C语言(1)以二叉链表表示二叉树,建立一棵二叉树; (2)输出二叉树的后序遍历结果
以下是用递归方法实现建立二叉树和输出后序遍历的C语言代码:
```c
#include<stdio.h>
#include<stdlib.h>
// 二叉树结点的定义
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 递归建立二叉树
TreeNode* createBinaryTree() {
int val;
scanf("%d", &val);
// 如果输入的值是-1,则表示没有子节点
if (val == -1) {
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = val;
root->left = createBinaryTree();
root->right = createBinaryTree();
return root;
}
// 递归后序遍历二叉树
void postorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->data);
}
int main() {
// 创建二叉树
printf("请输入二叉树的前序遍历结果,-1表示空节点:\n");
TreeNode* root = createBinaryTree();
// 输出后序遍历结果
printf("二叉树的后序遍历结果为:\n");
postorderTraversal(root);
printf("\n");
return 0;
}
```
使用示例:
输入:
```
1 2 -1 -1 3 4 -1 -1 5 -1 -1
```
输出:
```
二叉树的后序遍历结果为:
2 5 4 3 1
```
用递归的方法,以二叉链表表示二叉树,建立一棵二叉树,输出二叉树的后序遍历结果
我们可以先定义一个二叉树的结构体:
```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;
}
```