【C语言】 二叉树的创建和使用(太细了!!!)菜鸟级教程

一、二叉树介绍

二叉树(Binary Tree)是一种重要的数据结构,它在计算机科学和编程中经常被用到。它是一种层次结构,由节点(Node)组成,每个节点可以有零个、一个或两个子节点

  • 节点(Node):二叉树的基本构建块。每个节点包含一个数据元素,以及指向左子节点和右子节点的指针。节点的数据可以是任何类型,通常是整数或其他自定义类型。
  • 根节点(Root Node):二叉树的顶部节点,它没有父节点。它是整个树的起点。
  • 子节点(Child Node):每个节点可以有零、一个或两个子节点。左子节点和右子节点分别代表左侧和右侧的子树。
  • 叶子节点(Leaf Node):没有子节点的节点称为叶子节点。它们位于树的底部,即没有子树的节点。
  • 父节点(Parent Node):每个节点都可以有一个父节点,它是直接连接到当前节点的节点。
  • 深度(Depth):节点在树中的层次。根节点的深度为0,其子节点的深度为1,以此类推。
  • 高度(Height):树中的最大深度。根节点到叶子节点的最长路径的深度称为树的高度。
  • 二叉树的类型:根据节点的子节点数目,二叉树可以分为多种类型,包括二叉搜索树(Binary Search Tree,BST)、平衡二叉树(Balanced Binary Tree)、满二叉树(Full Binary Tree)、完全二叉树(Complete Binary Tree)等。
  • 遍历(Traversal):遍历是指按照特定顺序访问树的所有节点。常见的遍历方法包括前序遍历(Preorder Traversal)、中序遍历(Inorder Traversal)、后序遍历(Postorder Traversal)以及层次遍历(Level Order Traversal)。

二、使用步骤

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

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

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

// 创建一个新的二叉树节点
TreeNode* createNode(int value) {
    TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
    if (newNode == NULL) {
        fprintf(stderr, "内存分配失败\n");
        exit(1);
    }
    newNode->data = value;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;
}

// 插入节点到二叉树
TreeNode* insert(TreeNode* root, int value) {
    if (root == NULL) {
        return createNode(value);
    }

    if (value < root->data) {
        root->left = insert(root->left, value);
    } else if (value > root->data) {
        root->right = insert(root->right, value);
    }

    return root;
}

// 前序遍历二叉树
void preorderTraversal(TreeNode* root) {
    if (root != NULL) {
        printf("%d ", root->data); // 先访问当前节点的值
        preorderTraversal(root->left); // 递归遍历左子树
        preorderTraversal(root->right); // 递归遍历右子树
    }
}

// 中序遍历二叉树
void inorderTraversal(TreeNode* root) {
    if (root != NULL) {
        inorderTraversal(root->left); // 递归遍历左子树
        printf("%d ", root->data); // 访问当前节点的值
        inorderTraversal(root->right); // 递归遍历右子树
    }
}

// 后序遍历二叉树
void postorderTraversal(TreeNode* root) {
    if (root != NULL) {
        postorderTraversal(root->left); // 递归遍历左子树
        postorderTraversal(root->right); // 递归遍历右子树
        printf("%d ", root->data); // 最后访问当前节点的值
    }
}

// 销毁二叉树
void destroyTree(TreeNode* root) {
    if (root != NULL) {
        destroyTree(root->left); // 递归销毁左子树
        destroyTree(root->right); // 递归销毁右子树
        free(root); // 释放当前节点的内存
    }
}

int main() {
    TreeNode* root = NULL;

    // 插入节点到二叉树
    root = insert(root, 5);
    root = insert(root, 3);
    root = insert(root, 8);
    root = insert(root, 1);
    root = insert(root, 4);
    root = insert(root, 7);
    root = insert(root, 9);

    printf("前序遍历结果: ");
    preorderTraversal(root);
    printf("\n");

    printf("中序遍历结果: ");
    inorderTraversal(root);
    printf("\n");

    printf("后序遍历结果: ");
    postorderTraversal(root);
    printf("\n");

    // 销毁二叉树,释放内存
    destroyTree(root);

    return 0;
}
 输出结果:前序遍历结果: 5 3 1 4 8 7 9
          中序遍历结果: 1 3 4 5 7 8 9
          后序遍历结果: 1 4 3 7 9 8 5

粉丝福利、需求解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒创科技工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值