在C语言中,如何使用递归和非递归两种方式实现二叉树的先序、中序和后序遍历?请提供相应的代码示例。
时间: 2024-11-10 18:17:40 浏览: 33
二叉树的遍历是数据结构中的一项基础技能,它包括先序遍历、中序遍历和后序遍历。在C语言中,实现这三种遍历算法可以通过递归和非递归两种方法来完成。
参考资源链接:[C语言实现二叉树遍历:递归与非递归方法](https://wenku.csdn.net/doc/6412b688be7fbd1778d47116?spm=1055.2569.3001.10343)
先序遍历的递归实现非常直观,我们可以定义一个函数,先输出根节点的值,然后递归地调用该函数遍历左子树,最后递归地调用该函数遍历右子树。非递归实现则需要借助栈来模拟递归调用栈的过程。
中序遍历的递归实现是先递归遍历左子树,然后访问根节点,最后递归遍历右子树。在非递归实现中,我们通常利用栈来保存沿途访问的节点,先将所有左子节点入栈,然后逐个访问并弹栈,直到栈为空。
后序遍历的递归实现先递归遍历左右子树,然后访问根节点。非递归实现需要使用两个栈,一个栈用于保存子树根节点,另一个栈用于保存待访问的节点,以保证先访问左子树再访问右子树。
以下是具体的C语言代码实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树节点
TreeNode* createNode(int data) {
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 先序遍历递归实现
void PreOrderTraversal_Recursive(TreeNode *root) {
if (root == NULL) return;
printf(
参考资源链接:[C语言实现二叉树遍历:递归与非递归方法](https://wenku.csdn.net/doc/6412b688be7fbd1778d47116?spm=1055.2569.3001.10343)
阅读全文
相关推荐


















