117.info
人生若只如初见

C语言二叉树遍历代码怎么写

以下是C语言中二叉树的三种遍历方式(前序遍历、中序遍历和后序遍历)的代码实现:

#include 
#include 

typedef struct Node {
    int data;
    struct Node* left;
    struct Node* right;
} Node;

// 创建新节点
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if(newNode == NULL) {
        printf("内存分配失败!\n");
        exit(1);
    }
    newNode->data = https://www.yisu.com/ask/data;>left = NULL;
    newNode->right = NULL;
    return newNode;
}

// 前序遍历
void preorderTraversal(Node* root) {
    if(root != NULL) {
        printf("%d ", root->data);  // 先访问根节点
        preorderTraversal(root->left);  // 再前序遍历左子树
        preorderTraversal(root->right);  // 最后前序遍历右子树
    }
}

// 中序遍历
void inorderTraversal(Node* root) {
    if(root != NULL) {
        inorderTraversal(root->left);  // 先中序遍历左子树
        printf("%d ", root->data);  // 再访问根节点
        inorderTraversal(root->right);  // 最后中序遍历右子树
    }
}

// 后序遍历
void postorderTraversal(Node* root) {
    if(root != NULL) {
        postorderTraversal(root->left);  // 先后序遍历左子树
        postorderTraversal(root->right);  // 再后序遍历右子树
        printf("%d ", root->data);  // 最后访问根节点
    }
}

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

    // 前序遍历二叉树
    printf("前序遍历:");
    preorderTraversal(root);
    printf("\n");

    // 中序遍历二叉树
    printf("中序遍历:");
    inorderTraversal(root);
    printf("\n");

    // 后序遍历二叉树
    printf("后序遍历:");
    postorderTraversal(root);
    printf("\n");

    return 0;
}

这段代码首先定义了一个二叉树节点的结构体 Node,其中包含数据 data、左子节点指针 left 和右子节点指针 right。接着,定义了创建新节点的函数 createNode,用于动态分配内存,并返回新节点。然后,分别实现了三种遍历方式的函数:preorderTraversal(前序遍历)、inorderTraversal(中序遍历)和 postorderTraversal(后序遍历)。最后,在 main 函数中创建了一个二叉树,并分别调用了三种遍历函数,打印出遍历结果。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe886AzsLAwFUBlQ.html

推荐文章

  • c语言goto用法是什么

    在C语言中,goto语句用于从一个位置跳转到另一个位置。它可以用于跳出循环、条件语句或者函数。goto语句的语法如下:
    goto label;
    ...
    label: //...

  • goto在c语言中的运用方法是什么

    goto 语句在 C 语言中允许程序从一个位置跳转到另一个位置。然而,在实际编程中,过度使用 goto 语句通常被认为是一种不好的编程实践,因为它可能导致代码结构混...

  • c语言堆和栈的区别是什么

    C语言中的堆和栈是两种不同的内存分配方式。 栈(Stack):栈是由编译器自动分配和释放的内存区域,用于存储局部变量和函数调用的上下文信息。栈的特点是先进后出...

  • C语言结构体数组怎么定义和使用

    在C语言中,可以通过定义结构体数组来存储多个具有相同数据类型的结构体对象。下面是定义和使用结构体数组的示例代码:
    #include // 定义一个结构体类型

  • 怎么用java正则表达式匹配字符串

    要使用Java正则表达式匹配字符串,可以按照以下步骤进行: 导入正则表达式相关的类: import java.util.regex.Matcher;
    import java.util.regex.Pattern; 创...

  • win10兼容性设置的方法是什么

    要设置Windows 10的兼容性,可以按照以下步骤进行操作: 找到想要设置兼容性的应用程序或程序的可执行文件。通常,这些文件位于计算机的“Program Files”或“Pr...

  • win11电脑一睡眠就断网怎么解决

    如果在Windows 11操作系统下,计算机在睡眠后断网,您可以尝试以下解决方法: 更新网络驱动程序:打开设备管理器,找到并展开“网络适配器”选项,右键单击您的网...

  • java多线程怎么创建及使用

    在Java中,可以通过继承Thread类或实现Runnable接口来创建多线程。 继承Thread类: public class MyThread extends Thread { public void run() { // 线程执行的...