IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 植物大战 二叉树 概念——C -> 正文阅读

[数据结构与算法]植物大战 二叉树 概念——C

“人生如梦,一樽还酹江月”

猛戳订阅🍁🍁 👉 纯C详解数据结构专栏 👈 🍁🍁

普通树的概念

树由 根 和 n 棵子树组成,树是非线性数据结构。树是递归定义的,这点很重要。

树的特点

1.树的子树是不相交的。
2.除了根节点外,每个结点有且仅有一个父节点。
3.一棵N个节点的树有N-1条边。

树的术语

以下加粗的为重点

树的度:一棵树中,最大的节点的度称为树的度

节点的层次:从根开始定义起,根为第一层,根的子节点为第二层。

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

节点的度:一个节点含有的子树的个数成为该节点的度。

叶节点或终端节点:度为0的节点称为叶节点;

双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点。

孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点。

兄弟节点:具有相同父节点点节点称为兄弟节点。亲兄弟才是兄弟节点。

堂兄弟节点:双亲在同一层的节点护卫堂兄弟。

节点的祖先:从根到该节点所经分支上的所有节点。

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。

森林:有m(m > 0)棵互不相交的数的集合称为森林。

普通树的表示

来看看先辈们创造的优秀智慧。
存储树最优秀的结构:孩子兄弟表示法
即:一个节点有多少个孩子都无所谓。父亲指向第一个孩子,剩下的孩子,用孩子的兄弟指针连接起来。

typedef int DataType;
struct Node
{
 struct Node* _firstChild1; // 第一个孩子结点
 struct Node* _pNextBrother; // 指向其下一个兄弟结点
 DataType _data; // 结点中的数据域
};

二叉树概念

二叉树是我们要研究的重点。

二叉树:一棵二叉树是结点的一个有限集合。
该集合有两种情况。
1.为空树
2.由一个根节点加上两棵别称为左子树和右子树的二叉树组成
在这里插入图片描述
二叉树的特点
1.二叉树的度最大为2,即最多只有两颗子树。
2.二叉树的子树有有左右之分,次序不能颠倒,因此二叉树是有序树。
注意:因为二叉树是递归定义的
对于任意的二叉树都是由以下几种情况复合而成的
在这里插入图片描述

二叉树的性质

二叉树的性质是建立在两种特殊的二叉树上研究的。
在这里插入图片描述

1.满二叉树:每一层的结点数都达到了最大值。
2.完全二叉树:前k-1层都是满的,最后一层不满,但是最后一层从左往右是连续的。

性质1:若规定根节点的层数为1,则一棵非空二叉树的第h层上最多有 2h-1个结点.
在这里插入图片描述

性质2:若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2h-1 .
解释:根据等比数列前n项的和来看,n层相加得到2h-1

性质3:对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2 ,则有 n0=n2 +1

性质4:若规定根节点的层数为1,具有n个结点的满二叉树的深度,h= log2(n+1).
解释:这是对2h-1 = n公式的转换。

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

1.i位置节点的双亲下标:(i-1)/2
2.左孩子下标:2i+1
3.右孩子下标:2i+2

如图。
在这里插入图片描述

数组二叉树

上一章的堆,已经叙述。

  1. 顺序存储
    顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。

链式二叉树

学链式二叉树的什么内容?

普通二叉树增删查改没有价值,如果是为了单纯存放数据,不如用线性表。我们现在学习二叉树,1.是为了更好的控制他的结构,为后续学习复杂的搜索二叉树打基础
包括平衡搜索二叉树:AVL数、红黑树。学习搜索二叉树的意义在于可以用于搜索.
2.很多二叉树OJ算法题,都出在普通二叉树上。

二叉树的遍历

二叉树是递归实现的
思想

  • 当你看到一棵树就要有一个思想,要把树看成递归的,这点很重要。
  • 任何一棵树都要分为根,左子树,右子树。并且左右子树到空才算结束。
  • 递归就是大问题分成小问题,一直分解,直到不可分割后,就结束递归了。

前序遍历

也叫先根遍历,遍历方式是, 根,左子树,右子树,根可以直接遍历,左子树和右子树不可以直接遍历,左子树还会继续分为根, 左子树, 右子树。
在这里插入图片描述

1 2 3 null null null 4 5 null null 6 null null

中序遍历

也叫中根遍历,遍历方式是:左子树, 根, 右子树

null 3 null 2 null 1 null 5 null 4 null 6 null

后序遍历

遍历方式为:左子树, 右子树, 根

null null 3 null 2 null null 5 null null 6 4 1

层序遍历

最简单的遍历,就是一层一层的遍历。

1 2 4 3 5 6

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:01:27  更:2022-04-22 19:01:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:46:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码