编写函数计算度为i的结点数目_计算机网路基础3

点击蓝字

关注我们

01

局域网的特征

局域网分布范围小,投资少,配置简单等,具有如下特征:
(1)传输速率高:-般为1Mbps--20Mbps,光纤高速网可达100Mbps,1000MbpS
(2)支持传输介质种类多。
(3)通信处理一般由网卡完成。
(4)传输质量好,误码率低。
(5)有规则的拓扑结构。

2

数据结构(data structure):

数据元素和数据元素关系的集合,是指同一数据对象中个数据元素间存在的关系。

数据元素(data element):

是数据的基本单位,是数据集合中的一个个体;亦称节点(node)或记录(record);

数据(data):

是信息的载体,是可以用计算机表示并加工的各种“符号”的集合:

数据项(data item):

有独立含义的数据最小单位,也称域(field);

数据对象(data object):

有相同性质的数据元素的集合;

03

数据结构研究的主要问题

1)数据的逻辑结构:是指数据元素及其关系的数学特性,反映数据之间的逻辑关系。

三种基本结构:

线性结构:数据元素存在着线性(一对一)的关系;

树形结构:数据元素存在着层次(一对多)的关系;

图形结构:数据元素存在着任意(多对多)的关系。

2)数据的存储结构:数据在计算机内部的存储方式。

3)数据的操作:数据的操作即是对数据进行的处理

4)数据结构的三个方面

①.数据的逻辑结构

②.数据的存储结构

③.数据的运算:检索、排序、插入、删除、修改等

04

1、线性表的存储结构

采用顺序存储结构,称之为顺序表,亦为向量;

2、顺序表和链表的比较

(1)线性表的长度

顺序表的存储空间是静态分配的,故其上、下界是固定的,若执行过程中表长需要发生变化(插入、删除),就要留足空间,从而产生浪费,又可能因为不足而使表产生溢出。

在表长经常发生变化时,采用链表很方便。

(2)线性表的主要操作

顺序表连续存放,可随机存取表中任何记录,适于频繁的查找操作的表,但是进行插入、删除、移动时,就很不方便。

链表进行查找时,只能顺序从首指针起,比较浪费时间,但是插入、删除运算时,只需要较小的时间就可完成,但是其每一数据元素,多一指针域,浪费存储空间。

(3)高级语言实现

有些高级语言不支持指针,自然只能采用顺序表。

ad6b1514b7c45ef9d683279a9ad1b70e.png

05

1、堆栈定义:限定只能在表的一端进行插入和删除运算的特殊的线性表。其集合论的定义方法与线性表基本相同。

2、队定义:一种特殊的线性结构,限定只能在表的一端进行插入,在表的另一端进行删除的线性表。为什么使用循环队列:为了解决假溢出问题

3、循环队列:将头尾连接成一个环,形成的队列就是循环队列

4、数组概念:数组是线性表的推广,可以将之看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表。

5、稀疏定义:非零元较零元少,且分布没有一定规律的矩阵。

6、为了便于通过三元组法访问稀疏矩阵中的元素,通常附设两个向量POS和NUM,称为行辅助向量

伪地址表示法是通过本元素在矩阵中(含0元素)按行优先顺序的相对位置

7、带行指针向量的单链表

设置一个行指针向量,向量中每个元素为一个指针,指向本行矩阵的第一个非0元素节点,若本行无非0元素,则指针为空。矩阵中每一个非0元素由三个数据域,列、元素值以及指向本行下一个非0结点的指针,同一行的非0元素构成一个单链表。

06

树的常用术

语结点(Node):树中的元素,含数据项及若干指向其子树的指针;

结点的度(Degree):结点拥有的子树数。树中最大结点的度数称为树的度数;

结点的层次(Level):从根结点开始算起,根为第一层;

叶子(Leaf):度为零的结点,也称端结点;

孩子(Child):结点子树的根称为该结点的孩子结点;

兄弟(Sibling):同一双亲的孩子;

双亲(Parent):孩子结点的上层结点;

深度(Depth):树中结点的最大层次数。

森林(Forest):M棵互不相交的树的集合。

有序树:树中结点在同层中按从左到右有序排列、不能互换的称为有序树,反之,称为无序树。

d5d58f0a9635df9dfdf7022437a34656.gif

07

1、结点同构型:每个结点的指针域数目均为树的度数。运算方便,浪费空间。

2、二叉树定义:二叉树是n(n≥0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成。

3、二叉树的基本性质

1)二叉树的第i层上至多有2i-1(i≥1)个结点;

2)深度为h的二叉树中至多含有2h-1个结点;

3)若在任意一棵二叉树中,有n0个叶子结点,有n2个度为2的结点,则:n0=n2+1。

4、1)满二叉树

特点:深度为h且含有2h-1个结点的二叉树,为满二叉树。图示满二叉树,结点编号为自上而下,自左而右。

2)完全二叉树

特点:指深度为k的,有n个结点的,且每一个结点都与深度为k的满二叉树中编号从1至n的结点一—对应,完全一致,则为完全二叉树。

3)平衡二叉树

特点:又称AVL树,它或为一棵空树,或具如下性质:其左子树和右子树都是平衡二叉树,且左、右子树的深度之差的绝对值不超过1。左、右子树的深度之差为平衡因子,平衡二叉树的平衡因子只能为0,-1,1。

5、一般树转换为二叉树

由于二叉树常常用二叉链表表示,为了使一般树也能用二叉链表表示,必须找出树与二叉树之间的关系。为此,给定一棵树,可以找到唯一的一棵二叉树与之对应。

1)普通树转换为二叉树的方法:

2)对每个孩子进行自左至右的排序;

3)在兄弟之间加一条连线;

4)对每个结点,除了左孩子外,去除其与其余孩子之间的联系;

5)以根结点为轴心,将整个树顺时针转45度

点击蓝字

关注我们

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你好,关于你的问题,我可以回答。计算二叉树中叶子结点数目c的算法可以使用递归方法,对于每个节点,如果它是叶子节点,则c++,否则递归计算它的左右子树叶子节点数目之和。需要注意的是,在递归过程中,需要对空节点进行处理,即空节点不计算在内。希望我的回答对你有所帮助! ### 回答2: 编写算法计算二叉树中叶子节点数目c的方法如下: 1. 初始化一个变量count,用于记录叶子节点的数目。 2. 如果输入的二叉树为空树,则返回0。 3. 如果输入的二叉树只有一个节点,判断该节点是否为叶子节点。如果是,则返回1;如果不是,则返回0。 4. 如果输入的二叉树不为空且节点数大于1,遍历每个节点。 4.1 如果当前节点是叶子节点(即左子树和右子树均为空),则将count加1。 4.2 如果当前节点的左子树不为空,则对左子树递归调用该算法,将返回的结果加到count上。 4.3 如果当前节点的右子树不为空,则对右子树递归调用该算法,将返回的结果加到count上。 5. 返回count作为算法的结果。 下面是一个示例的算法实现(使用Python语言): ``` class TreeNode: def __init__(self, value): self.value = value self.left = None self.right = None def count_leaf_nodes(root): if root is None: return 0 if root.left is None and root.right is None: return 1 count = 0 if root.left is not None: count += count_leaf_nodes(root.left) if root.right is not None: count += count_leaf_nodes(root.right) return count ``` 其中,`TreeNode`是一个表示二叉树节点的类,`value`表示节点的值,`left`和`right`分别表示左子树和右子树。 我们可以创建一个二叉树,并调用`count_leaf_nodes`函数计算叶子节点的数目。示例如下: ``` # 创建一个二叉树 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) root.right.left = TreeNode(6) root.right.right = TreeNode(7) # 调用算法计算叶子节点数目 leaf_count = count_leaf_nodes(root) print(leaf_count) # 输出结果为4 ``` ### 回答3: 要编写一个算法计算二叉树中叶子节点数目c,可以使用递归的方式来实现。递归是指在函数中调用自己,这样可以很方便地遍历二叉树的所有节点。 以下是一个用于计算二叉树中叶子节点数目的递归算法: 1. 首先,定义一个计数器变量count并初始化为0,用于记录叶子节点的数量。 2. 如果当前节点为空,则返回0。 3. 如果当前节点的左子树和右子树为空,则表示当前节点是一个叶子节点,将count加1。 4. 如果当前节点的左子树不为空,则递归调用该算法计算左子树的叶子节点数目,并将结果加到count上。 5. 如果当前节点的右子树不为空,则递归调用该算法计算右子树的叶子节点数目,并将结果加到count上。 6. 返回count作为最后的结果。 具体的实现代码如下: ```python class TreeNode: def __init__(self, data): self.data = data self.left = None self.right = None def count_leaf_nodes(root): if root is None: return 0 if root.left is None and root.right is None: return 1 count = 0 if root.left is not None: count += count_leaf_nodes(root.left) if root.right is not None: count += count_leaf_nodes(root.right) return count ``` 以上代码中,先定义了一个节点类TreeNode,包含节点数据data以及左子节点left和右子节点right。然后定义了一个用于计算叶子节点数目函数count_leaf_nodes,该函数使用递归的方式实现。在函数中,首先判断当前节点是否为空,如果为空则返回0;然后判断当前节点是否为叶子节点,如果是,则返回1;否则递归调用函数计算左子树和右子树的叶子节点数目,并加到计数器count上,最后返回count作为最终结果。 使用该算法,可以很方便地计算出二叉树中叶子节点的数目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值