二叉树中序遍历递归c语言
时间: 2024-10-27 16:14:04 浏览: 20
在C语言中,二叉树的中序遍历通常采用递归的方式来实现。中序遍历的顺序是先左子树、然后根节点、最后右子树。以下是递归实现中序遍历的简单代码示例:
```c
// 定义二叉树结点结构体
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子节点指针
struct TreeNode* right; // 右子节点指针
} TreeNode;
// 中序遍历函数
void inorderTraversal(TreeNode* root) {
if (root != NULL) { // 如果当前节点非空
inorderTraversal(root->left); // 先访问左子树
printf("%d ", root->val); // 输出当前节点值
inorderTraversal(root->right); // 再访问右子树
}
}
```
在这个代码中,`inorderTraversal` 函数接收一个二叉树的根节点作为参数,如果节点存在,就对左子树进行递归遍历,然后再访问自身(输出节点值),最后递归遍历右子树。如果节点为空,则停止递归。
相关问题
二叉树 非递归中序遍历 c语言
二叉树的非递归中序遍历是指访问所有节点的一种方法,遵循“左根右”的顺序,即先遍历左子树,然后访问根节点,最后遍历右子树。在C语言中,我们可以利用栈数据结构实现这个过程,避免了直接使用递归带来的函数调用开销。
以下是C语言非递归实现二叉树中序遍历的基本步骤:
1. 定义一个结构体来表示二叉树节点,包含值、左右指针;
2. 创建一个空栈,用于存放待访问的节点;
3. 如果当前节点不为空:
a. 先将左子节点压入栈中,因为我们要先访问左子树;
b. 然后访问当前节点(打印或存储节点值);
c. 再弹出栈顶元素,继续处理其右子节点,直到右子节点为空。
4. 当栈为空且所有节点都处理完毕,遍历结束。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
void inorderTraversal(TreeNode* root) {
if (root == NULL) return;
stack<TreeNode*> s;
TreeNode* curr = root;
while (curr != NULL || !s.empty()) {
while (curr != NULL) {
s.push(curr);
curr = curr->left;
}
curr = s.top();
printf("%d ", curr->val); // 打印节点值
s.pop();
curr = curr->right;
}
}
// 示例:
TreeNode* createTree() { ... } // 根据需要创建二叉树
int main() {
TreeNode* root = createTree();
inorderTraversal(root);
return 0;
}
二叉树中序遍历递归算法c语言实现
二叉树的中序遍历可以通过递归算法来实现,在C语言中可以使用以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 中序遍历函数
void inorderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left); // 递归遍历左子树
printf("%d ", root->val); // 打印当前节点的值
inorderTraversal(root->right); // 递归遍历右子树
}
// 创建新节点
struct TreeNode* createNode(int val) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
int main() {
// 创建二叉树
struct TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// 中序遍历
printf("Inorder traversal: ");
inorderTraversal(root);
return 0;
}
```
运行以上代码,将会输出二叉树的中序遍历结果。希望对你有所帮助!
阅读全文