二叉树遍历递归算法c编程
时间: 2023-06-03 09:01:33 浏览: 155
二叉树遍历递归算法的C编程实现要求先序遍历,中序遍历和后序遍历的语句应该如何实现? 先序遍历的语句可以实现如下:
```
void PreOrder(struct node *root)
{
if(root != NULL)
{
printf("%d ", root->data);
PreOrder(root->left);
PreOrder(root->right);
}
}
```
中序遍历的语句可以实现如下:
```
void InOrder(struct node *root)
{
if(root != NULL)
{
InOrder(root->left);
printf("%d ", root->data);
InOrder(root->right);
}
}
```
后序遍历的语句可以实现如下:
```
void PostOrder(struct node *root)
{
if(root != NULL)
{
PostOrder(root->left);
PostOrder(root->right);
printf("%d ", root->data);
}
}
```
相关问题
二叉树先序遍历递归算法c语言
二叉树的先序遍历是指按照“根节点 -> 左子树 -> 右子树”的顺序访问每个节点。以下是使用递归实现的C语言代码示例:
```c
#include <stdio.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 先序遍历的递归函数
void preorderTraversal(TreeNode* root) {
if (root != NULL) { // 当节点存在时
printf("%d ", root->val); // 访问当前节点
// 递归遍历左子树
preorderTraversal(root->left);
// 递归遍历右子树
preorderTraversal(root->right);
}
}
int main() {
// 创建一个简单的二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
// 调用先序遍历
printf("Preorder Traversal: ");
preorderTraversal(root);
return 0;
}
```
在这个例子中,`preorderTraversal`函数作为主入口,当根节点不为空时,首先访问节点值,然后递归遍历左右子树。当所有子树都遍历完后,遍历结束。
二叉树中序遍历递归算法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;
}
```
运行以上代码,将会输出二叉树的中序遍历结果。希望对你有所帮助!
阅读全文