百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

C语言进阶教程:数据结构-树(二叉树、平衡树)的概念与基本操作

yund56 2025-05-24 22:09 40 浏览

1. 树的基本概念

树是一种重要的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

  • 结点(Node): 树中的基本单元,包含数据元素以及指向其子树的分支。
  • 根结点(Root Node): 没有父结点的结点,一棵树最多只有一个根结点。
  • 子结点(Child Node): 一个结点的直接后继结点。
  • 父结点(Parent Node): 一个结点的直接前驱结点。
  • 兄弟结点(Sibling Node): 拥有相同父结点的结点。
  • 叶子结点(Leaf Node)/ 终端结点: 没有子结点的结点。
  • 内部结点 / 非终端结点: 除叶子结点之外的结点。
  • 结点的度(Degree): 一个结点拥有的子树的个数。
  • 树的度: 树内各结点的度的最大值。
  • 路径(Path): 从结点n1到nk的路径为一个结点序列n1, n2, ..., nk,其中ni是ni+1的父结点。
  • 路径长度: 路径上边的数目。
  • 结点的层次(Level): 从根开始定义,根为第1层,根的子结点为第2层,以此类推。
  • 树的深度(Depth)/ 高度(Height): 树中结点的最大层次。
  • 森林(Forest): m(m>=0)棵互不相交的树的集合。

2. 二叉树

二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。

2.1 二叉树的性质

  1. 在二叉树的第i层上至多有 2^(i-1) 个结点 (i >= 1)。
  2. 深度为k的二叉树至多有 2^k - 1 个结点 (k >= 1)。
  3. 对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0 = n2 + 1。

2.2 特殊的二叉树

  • 满二叉树(Full Binary Tree): 在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的二叉树称为满二叉树。
  • 完全二叉树(Complete Binary Tree): 对一棵具有n个结点的二叉树按层序编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同,则这棵二叉树称为完全二叉树。

2.3 二叉树的存储结构

  • 顺序存储: 使用数组存储,适用于完全二叉树。
  • 链式存储: 使用链表存储,每个结点包含数据域、左孩子指针域和右孩子指针域。
 // 二叉树的链式存储结构定义
 typedef struct BiTNode {
     char data; // 结点数据
     struct BiTNode *lchild, *rchild; // 左右孩子指针
 } BiTNode, *BiTree;

3. 二叉树的遍历

二叉树的遍历是指按照某种次序访问树中的所有结点,并且每个结点仅被访问一次。

  • 先序遍历(Preorder Traversal): 根 -> 左子树 -> 右子树
  • 中序遍历(Inorder Traversal): 左子树 -> 根 -> 右子树
  • 后序遍历(Postorder Traversal): 左子树 -> 右子树 -> 根
  • 层序遍历(Level Order Traversal): 从上到下,从左到右逐层访问

4. 平衡树初步

平衡树是为了解决二叉搜索树在极端情况下退化成链表的问题而提出的。它要求树中任何结点的两个子树的高度差的绝对值不超过1。

  • AVL树: 最早的自平衡二叉搜索树。
  • 红黑树: 另一种自平衡二叉搜索树,广泛应用于各种数据结构和算法中。

5. 基本操作示例 (C语言)

 #include <stdio.h>
 #include <stdlib.h>
 
 // 二叉树结点定义
 typedef struct BiTNode {
     char data;
     struct BiTNode *lchild, *rchild;
 } BiTNode, *BiTree;
 
 // 创建二叉树 (先序遍历方式创建)
 BiTree CreateBiTree() {
     char ch;
     scanf("%c", &ch);
     if (ch == '#') { // '#' 表示空树
         return NULL;
     }
     BiTree T = (BiTree)malloc(sizeof(BiTNode));
     if (!T) {
         exit(OVERFLOW); // 内存分配失败
     }
     T->data = ch;
     T->lchild = CreateBiTree();
     T->rchild = CreateBiTree();
     return T;
 }
 
 // 先序遍历
 void PreOrderTraverse(BiTree T) {
     if (T) {
         printf("%c ", T->data);
         PreOrderTraverse(T->lchild);
         PreOrderTraverse(T->rchild);
     }
 }
 
 // 中序遍历
 void InOrderTraverse(BiTree T) {
     if (T) {
         InOrderTraverse(T->lchild);
         printf("%c ", T->data);
         InOrderTraverse(T->rchild);
     }
 }
 
 // 后序遍历
 void PostOrderTraverse(BiTree T) {
     if (T) {
         PostOrderTraverse(T->lchild);
         PostOrderTraverse(T->rchild);
         printf("%c ", T->data);
     }
 }
 
 int main() {
     BiTree myTree;
     printf("请按先序遍历输入二叉树结点 (例如: ABD##E##CF###, '#'表示空子树):\n");
     myTree = CreateBiTree();
 
     printf("\n先序遍历结果: ");
     PreOrderTraverse(myTree);
 
     printf("\n中序遍历结果: ");
     InOrderTraverse(myTree);
 
     printf("\n后序遍历结果: ");
     PostOrderTraverse(myTree);
 
     printf("\n");
 
     // 释放树的内存 (此处省略,实际应用中需要实现)
     return 0;
 }

总结

本节介绍了树和二叉树的基本概念、性质、存储结构以及遍历方法。同时初步了解了平衡树的概念。掌握这些内容是学习更高级数据结构和算法的基础。

相关推荐

SM小分队Girls on Top,女神战队少了f(x)?

这次由SM娱乐公司在冬季即将开演的smtown里,将公司的所有女团成员集结成了一个小分队project。第一位这是全面ACE的大姐成员权宝儿(BoA),出道二十年,在日本单人销量过千万,韩国国内200...

韩国女团 aespa 首场 VR 演唱会或暗示 Quest 3 将于 10 月推出

AmazeVR宣布将在十月份举办一场现场VR音乐会,观众将佩戴MetaQuest3进行体验。韩国女团aespa于2020年11月出道,此后在日本推出了三张金唱片,在韩国推出了...

韩网热议!女团aespa成员Giselle在长腿爱豆中真的是legend

身高163的Giselle,长腿傲人,身材比例绝了...

假唱而被骂爆的女团:IVE、NewJeans、aespa上榜

在韩国,其实K-pop偶像并不被认为是真正的歌手,因为偶像们必须兼备舞蹈能力、也经常透过对嘴来完成舞台。由于科技的日渐发达,也有许多网友会利用消音软体来验证K-pop偶像到底有没有开麦唱歌,导致假唱这...

新女团Aespa登时尚大片 四个少女四种style

来源:环球网

韩国女团aespa新歌MV曝光 画面梦幻造型超美

12月20日,韩国女团aespa翻唱曲《DreamsComeTrue》MV公开,视频中,她们的造型超美!WINTER背后长出一双梦幻般的翅膀。柳智敏笑容甜美。宁艺卓皮肤白皙。GISELLE五官精致...

女网友向拳头维权,自称是萨勒芬妮的原型?某韩国女团抄袭KDA

女英雄萨勒芬妮(Seraphine)是拳头在2020年推出的第五位新英雄,在还没有正式上线时就备受lsp玩家的关注,因为她实在是太可爱了。和其他新英雄不同的是,萨勒芬妮在没上线时就被拳头当成虚拟偶像来...

人气TOP女团是?INS粉丝数见分晓;TWICE成员为何在演唱会落泪?

现在的人气TOP女团是?INS粉丝数见分晓!现在爱豆和粉丝之间的交流方法变得多种多样,但是Instagram依然是主要的交流手段。很多粉丝根据粉丝数评价偶像的人气,拥有数百、数千万粉丝的组合作为全球偶...

韩国女团MVaespa Drama MV_韩国女团穿超短裙子跳舞

WelcometoDrama.Pleasefollow4ruleswhilewatchingtheDrama.·1)Lookbackimmediatelywhenyoufe...

aespa师妹团今年将出道! SM职员亲口曝「新女团风格、人数」

记者刘宛欣/综合报导南韩造星工厂SM娱乐曾打造出东方神起、SUPERJUNIOR、少女时代、SHINee、EXO等传奇团体,近年推出的aespa、RIIZE更是双双成为新生代一线团体,深受大众与粉丝...

南韩最活跃的女团aespa,新专辑《Girls》即将发布,盘点昔日经典

女团aespa歌曲盘点,新专辑《Girls》即将发布,期待大火。明天也就是2022年的7月8号,aespa新专辑《Girls》即将发行。这是继首张专辑《Savage》之后,时隔19个月的第二张专辑,这...

章泽天女团aespa出席戛纳晚宴 宋康昊携新片亮相

搜狐娱乐讯(山今/文玄反影/图科明/视频)法国时间5月23日晚,女团aespa、宋康昊、章泽天等明星亮相戛纳晚宴。章泽天身姿优越。章泽天肩颈线优越。章泽天双臂纤细。章泽天仪态端正。女团aespa亮...

Aespa舞台暴露身高比例,宁艺卓脸大,柳智敏有“TOP”相

作为SM公司最新女团aespa,初舞台《BlackMamba》公开,在初舞台里,看得出来SM公司是下了大功夫的,虽然之前SM公司新出的女团都有很长的先导片,但是aespa显然是有“特殊待遇”。运用了...

AESPA女团成员柳智敏karina大美女

真队内速度最快最火达成队内首个且唯一两百万点赞五代男女团中输断层第一(图转自微博)...

对来学校演出的女团成员语言性骚扰?韩国这所男高的学生恶心透了

哕了……本月4日,景福男子高中相关人士称已经找到了在SNS中上传对aespa成员进行性骚扰文章的学生,并开始着手调查。2日,SM娱乐创始人李秀满的母校——景福高中迎来了建校101周年庆典活动。当天,S...