二叉树后序遍历代码c语言
时间: 2024-11-24 15:40:16 浏览: 4
在 C 语言中,后序遍历是一种用于访问二叉树节点的算法,其顺序是先遍历左子树,然后右子树,最后访问根节点。以下是后序遍历的典型递归实现:
```c
// 定义二叉树结点结构
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 后序遍历函数
void postorderTraversal(TreeNode* root) {
if (root == NULL) return; // 如果当前节点为空,则返回
postorderTraversal(root->left); // 先遍历左子树
postorderTraversal(root->right); // 再遍历右子树
printf("%d ", root->val); // 最后访问根节点并打印其值
}
```
在这个例子中,`postorderTraversal` 函数接收一个指向树根的指针,如果节点为空则停止递归;否则,它会先递归地遍历左子树和右子树,最后才处理当前节点。
相关问题
二叉树后序遍历非递归代码c语言
二叉树的后序遍历是非递归的一种常用算法,它按照“左-右-根”的顺序访问节点。非递归实现通常会利用栈的数据结构来模拟递归过程。以下是一个简单的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
void printPostorderHelper(TreeNode* root) {
if (root == NULL) return;
// 先处理左子树
printPostorderHelper(root->left);
// 然后处理右子树
printPostorderHelper(root->right);
// 最后打印当前节点
printf("%d ", root->val);
}
void postorderTraversal(TreeNode* root) {
Stack<TreeNode*> stack;
if (root != NULL) {
stack.push(root);
}
while (!stack.isEmpty()) {
TreeNode* current = stack.pop();
// 如果当前节点不为空,先处理其右子树
if (current->right != NULL) {
stack.push(current->right);
}
// 再处理左子树
if (current->left != NULL) {
stack.push(current->left);
}
// 当左右子树都处理完后,再打印当前节点
printf("%d ", current->val);
}
}
int main() {
// 创建并初始化一个二叉树
// ... (这部分需要你自己填充)
TreeNode* root = ...;
if (root != NULL) {
postorderTraversal(root);
}
return 0;
}
```
在这个代码里,`printPostorderHelper` 函数是一个辅助函数,用于实际进行后序遍历。`postorderTraversal` 主函数负责初始化栈,并通过循环控制遍历过程。当遍历完成后,节点值会被依次输出。
二叉树后序遍历的算法代码
### 回答1:
后序遍历二叉树的算法代码如下:def postOrder(root):
if root:
postOrder(root.left)
postOrder(root.right)
print(root.data)
### 回答2:
二叉树后序遍历是指先访问左子树,再访问右子树,最后访问根节点的遍历方式。接下来给出二叉树后序遍历的算法代码的实现。
在二叉树后序遍历的算法代码实现中,我们可以使用递归或栈来辅助完成。这里给出使用递归的实现方式。
首先定义二叉树的节点数据结构:
```
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
```
然后实现后序遍历的函数:
```
def postorderTraversal(root):
if root is None:
return []
result = []
result += postorderTraversal(root.left) # 访问左子树
result += postorderTraversal(root.right) # 访问右子树
result.append(root.val) # 访问根节点
return result
```
代码中使用递归的方式来实现后序遍历。首先判断根节点是否为空,若为空,则返回空列表。然后递归地访问左子树,再递归地访问右子树。最后将根节点的值添加到结果列表中。
下面给出一个示例来展示如何使用该函数进行后序遍历:
```
# 创建一个二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
# 对二叉树进行后序遍历
result = postorderTraversal(root)
# 输出遍历结果
print(result) # 输出 [4, 5, 2, 3, 1]
```
以上就是二叉树后序遍历的算法代码的实现。
阅读全文