先序遍历中序遍历后序遍历

本文介绍了二叉树的三种基本遍历方法(先序、中序和后序),并提供了C语言的示例代码,展示了如何通过递归实现这些遍历过程在二叉树上的操作。
摘要由CSDN通过智能技术生成

先序遍历、中序遍历和后序遍历是二叉树遍历的三种基本方式。

先序遍历(Preorder Traversal):首先访问根节点,然后按照先序遍历的方式递归访问左子树,最后递归访问右子树。

中序遍历(Inorder Traversal):首先按照中序遍历的方式递归访问左子树,然后访问根节点,最后递归访问右子树。

后序遍历(Postorder Traversal):首先按照后序遍历的方式递归访问左子树,然后递归访问右子树,最后访问根节点。

这三种遍历方式可以应用于任何类型的树,但在二叉树中最为常见。

以一个二叉树的例子来说明这三种遍历方式:

      A
     / \
    B   C
   / \   \
  D   E   F

先序遍历:A -> B -> D -> E -> C -> F
中序遍历:D -> B -> E -> A -> C -> F
后序遍历:D -> E -> B -> F -> C -> A
以下是使用 C 语言实现先序遍历、中序遍历和后序遍历的示例代码:

#include <stdio.h>
#include <stdlib.h>

// 二叉树结点定义
struct Node {
    int data;
    struct Node* left;
    struct Node* right;
};

// 创建新结点
struct Node* createNode(int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;
}

// 先序遍历
void preorderTraversal(struct Node* root) {
    if (root == NULL) {
        return;
    }
    printf("%d ", root->data);
    preorderTraversal(root->left);
    preorderTraversal(root->right);
}

// 中序遍历
void inorderTraversal(struct Node* root) {
    if (root == NULL) {
        return;
    }
    inorderTraversal(root->left);
    printf("%d ", root->data);
    inorderTraversal(root->right);
}

// 后序遍历
void postorderTraversal(struct Node* root) {
    if (root == NULL) {
        return;
    }
    postorderTraversal(root->left);
    postorderTraversal(root->right);
    printf("%d ", root->data);
}

int main() {
    // 创建示例二叉树
    struct Node* root = createNode(1);
    root->left = createNode(2);
    root->right = createNode(3);
    root->left->left = createNode(4);
    root->left->right = createNode(5);
    root->right->right = createNode(6);

    printf("Preorder Traversal: ");
    preorderTraversal(root);
    printf("\n");

    printf("Inorder Traversal: ");
    inorderTraversal(root);
    printf("\n");

    printf("Postorder Traversal: ");
    postorderTraversal(root);
    printf("\n");

    return 0;
}

在示例代码中,我们首先定义了一个二叉树结点 Node,包含一个整数 data 和左右子树的指针。然后,我们使用 createNode 函数创建了一个示例二叉树。

接下来,我们实现了 preorderTraversal、inorderTraversal 和 postorderTraversal 函数,分别用于先序遍历、中序遍历和后序遍历。这些函数使用递归的方式遍历二叉树,并打印每个结点的数据。

最后,在 main 函数中,我们调用这些遍历函数来遍历示例二叉树,并打印遍历结果。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值