c语言二叉树的后序遍历代码
时间: 2023-09-16 13:15:01 浏览: 80
以下是C语言实现二叉树后序遍历的代码示例:
```
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
void postorderTraversal(struct TreeNode* root){
if(root == NULL) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val);
}
```
该代码使用递归方法实现后序遍历,先遍历左子树,再遍历右子树,最后输出根节点的值。
相关问题
二叉树后序遍历代码c语言
在 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` 主函数负责初始化栈,并通过循环控制遍历过程。当遍历完成后,节点值会被依次输出。
阅读全文