实验题目:二叉树的建立、遍历和删除

实验目的:通过本实验,学生应掌握二叉树的建立、遍历和删除操作,加深对数据结构的理解。

实验原理:二叉树是一种特殊的树结构,每个节点最多只有两个子节点。通过递归方式进行构建和遍历。

实验步骤:

  1. 建立二叉树

    二叉树的建立可以通过递归方式进行,对于每个节点,先输入该节点的值,然后递归构建左子树和右子树。代码如下:

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

Node *create_tree()
{
    int value;
    scanf("%d", &value);
    if (value == -1)
        return NULL;
    Node *new_node = (Node *)malloc(sizeof(Node));
    new_node->value = value;
    new_node->left = create_tree();
    new_node->right = create_tree();
    return new_node;
}
  1. 二叉树的遍历

    二叉树的遍历有三种方式:前序遍历、中序遍历和后序遍历。其中前序遍历指的是先访问根节点,再访问左子树和右子树;中序遍历指的是先访问左子树,再访问根节点和右子树;后序遍历指的是先访问左子树和右子树,再访问根节点。代码如下:

void preorder_traversal(Node *root)
{
    if (root == NULL)
        return;
    printf("%d ", root->value);
    preorder_traversal(root->left);
    preorder_traversal(root->right);
}

void inorder_traversal(Node *root)
{
    if (root == NULL)
        return;
    inorder_traversal(root->left);
    printf("%d ", root->value);
    inorder_traversal(root->right);
}

void postorder_traversal(Node *root)
{
    if (root == NULL)
        return;
    postorder_traversal(root->left);
    postorder_traversal(root->right);
    printf("%d ", root->value);
}
  1. 二叉树的删除

    二叉树的删除操作需要注意几点:先删除左子树和右子树,再删除根节点;如果左子树或右子树为空,则直接删除该节点。代码如下:

void delete_tree(Node *root)
{
    if (root == NULL)
        return;
    delete_tree(root->left);
    delete_tree(root->right);
    free(root);
}

实验结果:

输入样例:1 2 4 -1 -1 5 -1 -1 3 -1 6 7 -1 -1 -1

输出样例:

前序遍历:1 2 4 5 3 6 7 中序遍历:4 2 5 1 3 6 7 后序遍历:4 5 2 7 6 3 1

实验结论:

通过本实验,我掌握了二叉树的建立、遍历和删除操作。在实际应用中,二叉树可以用来解决很多问题,如排序、查找等


原文地址: https://www.cveoy.top/t/topic/ffrF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录