c语言以链表为存储结构,用递归和非递归方式实现二叉树的中序遍历
时间: 2024-03-20 08:41:54 浏览: 124
好的,我来为您解答这个问题。
首先,我们需要定义二叉树的节点结构:
```c
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
接下来,我们来实现二叉树的中序遍历。
1. 非递归方式
使用非递归方式实现二叉树的中序遍历,需要借助栈来保存节点信息。
```c
void inorderTraversal(TreeNode* root) {
if (root == NULL) return;
TreeNode* stack[1000];
int top = -1;
TreeNode* p = root;
while (p != NULL || top != -1) {
while (p != NULL) {
stack[++top] = p;
p = p->left;
}
p = stack[top--];
printf("%d ", p->data);
p = p->right;
}
}
```
2. 递归方式
使用递归方式实现二叉树的中序遍历,可以简单地使用递归函数来实现。
```c
void inorderTraversal(TreeNode* root) {
if (root == NULL) return;
inorderTraversal(root->left);
printf("%d ", root->data);
inorderTraversal(root->right);
}
```
以上就是使用递归和非递归方式实现二叉树的中序遍历的代码,希望能对您有所帮助。
阅读全文