C语言实现经典数据结构代码---二叉树

目录

二叉树简介

二叉树的基本实现原理

遍历二叉树


二叉树简介

二叉树是一种常见的树形数据结构,它由一组节点组成,每个节点最多有两个子节点。二叉树的实现可以使用节点结构体和递归来表示。

二叉树的基本实现原理

节点定义:首先定义一个节点结构体,包含三个成员变量:数据和左右子节点的指针。

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

创建节点:通过动态内存分配,使用malloc()函数创建一个新的节点,并初始化数据和左右子节点指针。

Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;
}

插入节点:根据二叉树的规则,将新节点插入到合适的位置。如果新节点的数据小于当前节点,则将新节点插入到当前节点的左子树;如果新节点的数据大于当前节点,则将新节点插入到当前节点的右子树。

void insertNode(Node** root, int data) {
    if (*root == NULL) {
        *root = createNode(data);
    } else {
        if (data < (*root)->data) {
            insertNode(&(*root)->left, data);
        } else {
            insertNode(&(*root)->right, data);
        }
    }
}

遍历二叉树

通过递归方式,依次访问二叉树的每个节点。常见的遍历方式有中序遍历、前序遍历和后序遍历。

  • 中序遍历:先遍历左子树,然后访问当前节点,最后遍历右子树。
void inorderTraversal(Node* root) {
    if (root != NULL) {
        inorderTraversal(root->left);
        printf("%d ", root->data);
        inorderTraversal(root->right);
    }
}
  • 前序遍历:先访问当前节点,然后遍历左子树,最后遍历右子树。
void preorderTraversal(Node* root) {
    if (root != NULL) {
        printf("%d ", root->data);
        preorderTraversal(root->left);
        preorderTraversal(root->right);
    }
}
  • 后序遍历:先遍历左子树,然后遍历右子树,最后访问当前节点。
void postorderTraversal(Node* root) {
    if (root != NULL) {
        postorderTraversal(root->left);
        postorderTraversal(root->right);
        printf("%d ", root->data);
    }
}

使用递归方式实现二叉树的插入和遍历操作,递归的本质是通过函数的调用来实现对子问题的处理。递归遍历二叉树时,先处理当前节点,再处理左子树和右子树,从而实现对整个二叉树的遍历操作。

猜你喜欢

转载自blog.csdn.net/L888666Q/article/details/131416402