C-数据结构-树状存储基本概念

ops/2024/9/24 15:39:13/

‘’’
树状存储基本概念

深度(层数)
度(子树个数)
叶子
孩子
兄弟
堂兄弟

二叉树:
满二叉树:
完全二叉树:

存储:顺序,链式

树的遍历:按层遍历,先序,中序,后序

‘’’
树是计算机科学中的一种重要数据结构。以下是关于树的基本概念和类型的详细介绍。

基本概念

  • 深度(层数):树中某个节点的深度是从根节点到该节点所经历的边的数目。根节点的深度为0。

  • 度(子树个数):一个节点的度是该节点的子节点(或子树)的个数。树的度是指树中所有节点的度的最大值。

  • 叶子:叶子节点是指没有子节点的节点,即度为0的节点。

  • 孩子:某个节点的直接下属节点称为该节点的孩子。

  • 兄弟:具有同一个父节点的多个节点之间互称为兄弟。

  • 堂兄弟:具有同一祖父节点但不同父节点的节点之间互称为堂兄弟。

二叉树

二叉树是一种特殊的树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树有以下几种特殊形式:

  • 满二叉树:一个二叉树如果除了叶子节点外,每个节点都有两个子节点,并且所有叶子节点都在同一层次上,那么这个二叉树就是满二叉树。

  • 完全二叉树:一个二叉树,如果除了最后一层外,每一层的节点都是满的,并且最后一层的节点都从左到右连续排列,这样的二叉树就是完全二叉树。

存储方式

  • 顺序存储:利用数组存储二叉树。通常按层次顺序存储,从根节点开始,依次存入数组的相应位置。

  • 链式存储:利用链表存储二叉树。每个节点使用一个结构体表示,结构体包含数据域和两个指针域,分别指向左子节点和右子节点。

树的遍历

  • 按层遍历:从树的根节点开始,逐层遍历树中的所有节点。这种遍历方式也称为广度优先遍历。

  • 先序遍历(前序遍历):先访问根节点,然后递归地先序遍历左子树,最后递归地先序遍历右子树。

  • 中序遍历:先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。

  • 后序遍历:先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。

  • 先中 和中后 能确定一颗树

以下是树的各种存储方式和遍历方式的示例代码:
在这里插入图片描述

顺序存储示例

#define MAXSIZE 100typedef struct {int data[MAXSIZE];int size;
} SeqTree;

链式存储示例

typedef struct TreeNode {int data;struct TreeNode *left, *right;
} TreeNode;

树的遍历示例

// 先序遍历
void preOrder(TreeNode *root) {if (root != NULL) {printf("%d ", root->data);preOrder(root->left);preOrder(root->right);}
}// 中序遍历
void inOrder(TreeNode *root) {if (root != NULL) {inOrder(root->left);printf("%d ", root->data);inOrder(root->right);}
}// 后序遍历
void postOrder(TreeNode *root) {if (root != NULL) {postOrder(root->left);postOrder(root->right);printf("%d ", root->data);}
}// 按层遍历
void levelOrder(TreeNode *root) {if (root == NULL) return;Queue q;initQueue(&q);enqueue(&q, root);while (!isEmpty(&q)) {TreeNode *node = dequeue(&q);printf("%d ", node->data);if (node->left != NULL) enqueue(&q, node->left);if (node->right != NULL) enqueue(&q, node->right);}
}

通过以上介绍,相信你对树的基本概念、二叉树及其特殊形式、存储方式和遍历方法有了更清晰的理解。


http://www.ppmy.cn/ops/46730.html

相关文章

[排序算法]插入排序+希尔排序全梳理!

目录 1.排序是什么?1.1排序的概念1.2排序运用1.3常见的排序算法 2.插入排序分类3.直接插入排序基本思想具体步骤:动图演示代码实现直接插入排序的特性总结: 4. 希尔排序基本思想具体步骤动图演示代码实现希尔排序的特性总结: 5.总…

二分查找学习:优雅的二分查找——“Leetcode 35. 搜索插入位置”

例题 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2…

基础—SQL—DML(数据操作语言)修改和删除

一、引言 接着上次博客,这次讲解DML语句中的修改数据和删除数据操作。 二、DML—修改数据 UPDATE 表名 SET 字段名1值1 ,字段名2值2 , ...[ WHERE 条件]; 注意:修改语句的条件可以有,也可以没有。如果没有条件,则会修改整张表的…

【数据结构】复杂度的重要性—–决定程序运行的效率

【数据结构】复杂度的重要性—–决定程序运行的效率 前言 在我们写算法的时候,常常会需要考虑一个问题:这个算法好不好?而这个“好”实际上就取决于是算法的复杂度。 算法复杂度(Algorithmic Complexity)是指算法在编…

植物大战僵尸杂交版破解C++实现

文章目录 前言准备工作:基地址与偏移UI界面设计和绑定项目模板总览图生成与实现信号处理1、阳光值更新:BTN12、三种钱币值更新:BTN2-BTN43、冷却刷新:BTN54、锁定阳光:check15、无冷却:check26、OnTimer()和OnClose&am…

埃及媒体分发投放-新闻媒体通稿发布

埃及商业新闻 大舍传媒近日宣布将在埃及商业新闻领域展开新的媒体分发投放。作为埃及最具影响力的商业新闻平台之一,埃及商业新闻将为大舍传媒提供广阔的市场和受众群体。这一合作意味着大舍传媒将有机会通过埃及商业新闻的平台向埃及的商业精英和投资者传递最新的…

文件系统小册(FusePosixK8s csi)【1 Fuse】

文件系统小册(Fuse&Posix&K8s csi)【1 Fuse:用户空间的文件系统】 Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持,开发者只需要根据fuse提供的接口实现具体的文件操作就可以实现一个文…

利用人工智能实现量子计算

转载自:利用人工智能实现量子计算 2024年 5月 12日 By Mark Wolf https://developer.nvidia.com/zh-cn/blog/enabling-quantum-computing-with-ai/ 文章目录 一、概述二、改进量子处理器三、校正噪声量子位的误差四、开发高效的量子算法五、探索量子计算的人工智能 …