第八章:C语言数据结构与算法初阶之树
创始人
2025-05-29 06:11:40

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、什么是树
    • 1、树的概念
    • 2、非树
      • 树的子节点之间没有联系
      • 树的子节点有且仅有一个父节点
    • 3、树的术语
    • 4、树的表示——孩子兄弟表示法
  • 二、二叉树
    • 1、满二叉树
    • 2、完全二叉树
  • 三、二叉树的性质
  • 总结


前言


树是一种非常重要的数据结构。

一、什么是树

1、树的概念

树是一种 非线性 的数据结构,它是由n(n>=0)个有限节点组成一个具有层次关系的集合。
线性结构其实就是一对一的感觉,比如我们之前学的顺序表、链表、栈、队列他们都是一对一的,而非线性结构自然就是一对多的,如下图所示:
在这里插入图片描述
这个图中的非线性结构,将其倒过来的时候其实就形似一棵树,因此这种非线性结构就称之为

2、非树

树的子节点之间没有联系

树的子节点之间是没有联系的。下图所示的图中红线连接两个子节点,所以这个结构就不是树。
在这里插入图片描述

树的子节点有且仅有一个父节点

子节点通过红线连接了新的父节点,导致这些子节点的父节点不只有一个。因此这种结构不称之为树。
在这里插入图片描述

3、树的术语

在这里插入图片描述

节点的度
一个节点含有的子树的个数称之为度,简而言之,该节点直接相连了几个子节点,他的度就是多少。

叶结点
没有子节点的节点称之为叶节点,即度为0的节点称之为叶节点。

父节点
若一个节点有子节点,那么这个节点就是那些子节点的父节点。

子节点
若一个节点有父节点,那么这个节点就是父节点的子节点。

节点的祖先
从根到该节点的路径上,所有在该节点上方的节点都是该点的祖先。

子孙
以某一节点为根的子树中任一节点。

节点的层次
从根节点开始定义起,根为第一层,根的子节点为第二层,以此类推。

树的高度或深度
树中节点的最大层次。

4、树的表示——孩子兄弟表示法

在这里插入图片描述
我们创建一个结构体,这个结构体除了存储该节点的数据外,还要存储左边第一个子节点的地址,以及右边第一个兄弟节点的地址。这样就能有效地串通所有的节点。

struct TreeNode
{int a;struct TreeNode *firstchild;struct TreeNode *nextbrother;
};

二、二叉树

二叉树是一种特殊的树,节点的度都小于等于2。
在这里插入图片描述

1、满二叉树

满二叉树是一种特殊的二叉树,除了叶节点的度为0外,其余节点的度均为2。
在这里插入图片描述

2、完全二叉树

在这里插入图片描述
完全二叉树前N-1层是满的,最有一层可以不满,但必须从左到右是连续的,所以满二叉树是特殊的完全二叉树。

三、二叉树的性质

  1. 若规定根节点的层数是1,则一棵非空二叉树的第i层上最多有2(i-1)个节点。

  2. 若规定根节点的层数是1,则深度为h的二叉树的最大节点数是2h-1。

  3. 对任何一棵二叉树,度为0的叶结点个数为n0,度为2的节点个数为n2​,则有n0 = n2 + 1​

  4. 若规定根节点的层数为1,具有n个节点的满二叉树的深度为h,h=log2(n+1)

  5. 对于具有n个节点的完全二叉树,如果按照从上至下从左到右的数组顺序对所有节点从0开始编号,则对于序号为i的节点有:

    • 若 i>0,i位置节点的父节点的序号为:(i-1)/2, i=0的时候,i为根节点的编号,没有父亲节点。

    • 若2i+1=n,没有左孩子。

    • 若2i+2=n,没有右孩子。

在这里插入图片描述

从上面的图片中的规律所示,我们能得到如下推导:
第N层:2^(N-1)

所以最多节点数为:
MAX = 20 + 21 + … + 2N-1= 2N + 1
MIN = 2N-1 + 2

设节点的个数为N,满二叉树的高度为h:
h = log2(N+1)


总结

树是一种非线性结构,二叉树是特殊的树。
生活的情况越艰难,我越感到自己更坚强,甚而也更聪明。——高尔基

相关内容

热门资讯

出行同意书公证:未成年人跨境旅... 当小明兴奋地整理着去法国参加夏令营的行李时,他的父母却在处理一件看似简单却至关重要的文件——出行同意...
旅途别只顾拍照!调动感官,才真... 旅行途中,能吸引我们的,常常是那些进入我们视线的自然或者人文景观。然而,“风景”可不单单只是明信片上...
宠物食品:主粮生产工艺分析(4... 本文为节选内容,更多报告,关注公众号:大消费市场调研 工艺:生产工艺持续迭代,新工艺粮增速较快 在“...
15个大厨不外传的做菜小技巧,... 💬 你是否曾经羡慕身边那些做饭特别好吃的朋友?他们总能用简单的食材,做出令人垂涎的美味佳肴。其实,做...