《数据结构-C语言实现树(tree)》实现二叉树,并且包含前序、中序、后序遍历

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

// 定义二叉树的节点结构体
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};

// 创建一个新的节点
struct TreeNode* new_node(int val) {
    struct TreeNode* node = (struct TreeNode*) malloc(sizeof(struct TreeNode));
    node->val = val;
    node->left = NULL;
    node->right = NULL;
    return node;
}

// 插入节点
struct TreeNode* insert_node(struct TreeNode* root, int val) {
    if (root == NULL) {
        root = new_node(val);
        return root;
    }
    if (val < root->val) {
        root->left = insert_node(root->left, val);
    } else {
        root->right = insert_node(root->right, val);
    }
    return root;
}

// 前序遍历
void preorder_traversal(struct TreeNode* root) {
    if (root != NULL) {
        printf("%d ", root->val);
        preorder_traversal(root->left);
        preorder_traversal(root->right);
    }
}

// 中序遍历
void inorder_traversal(struct TreeNode* root) {
    if (root != NULL) {
        inorder_traversal(root->left);
        printf("%d ", root->val);
        inorder_traversal(root->right);
    }
}

// 后序遍历
void postorder_traversal(struct TreeNode* root) {
    if (root != NULL) {
        postorder_traversal(root->left);
        postorder_traversal(root->right);
        printf("%d ", root->val);
    }
}

int main() {
    // 创建一个二叉树
    struct TreeNode* root = new_node(5);
    insert_node(root, 3);
    insert_node(root, 7);
    insert_node(root, 2);
    insert_node(root, 4);
    insert_node(root, 6);
    insert_node(root, 8);

    // 前序遍历二叉树并输出结果
    printf("前序遍历结果:");
    preorder_traversal(root);
    printf("\n");

    // 中序遍历二叉树并输出结果
    printf("中序遍历结果:");
    inorder_traversal(root);
    printf("\n");

    // 后序遍历二叉树并输出结果
    printf("后序遍历结果:");
    postorder_traversal(root);
    printf("\n");

    return 0;
}

在这个示例中,我们首先定义了一个名为TreeNode的结构体来表示二叉树的节点。我们还定义了函数new_node,用于创建新的节点并初始化它的值和子节点指针。

insert_node函数中,我们实现了向二叉树中插入节点的功能。如果树为空,我们创建一个新的节点并返回它。如果节点值比根节点小,则插入到左子树中,否则插入到右子树中。

preorder_traversal函数中,我们实现了前序遍历二叉树的功能。我们首先访问根节点,然后遍历左

子树,最后遍历右子树。在inorder_traversal函数中,我们实现了中序遍历二叉树的功能。我们首先遍历左子树,然后访问根节点,最后遍历右子树。在postorder_traversal函数中,我们实现了后序遍历二叉树的功能。我们首先遍历左子树,然后遍历右子树,最后访问根节点。

main函数中,我们首先创建了一个新的二叉树,并向其中插入了一些节点。然后,我们分别调用preorder_traversalinorder_traversalpostorder_traversal函数,对这个二叉树进行前序、中序和后序遍历,并输出遍历的结果。

注意,上面的代码仅仅是一个简单的示例,用于演示二叉树和前序、中序、后序遍历的实现方式。实际上,在实际的应用中,还需要考虑一些额外的因素,例如二叉树的平衡性、插入和删除节点的算法效率等等。

猜你喜欢

转载自blog.csdn.net/Like_Bamboo/article/details/129683389