【含例题】树中边、度、点的关系

例题
一棵二叉树,度为2结点数为70,度为1结点数为176,则叶子结点数为( ).

A.71

B.69

C.175

D.177

在做这道题之前,要先理解一棵树中点数、度数和边数的关系。

对一棵n度树,设0度点(叶子节点)数量为 N 0 N_0 N0,1度点数量为 N 1 N_1 N1……n度点为 N n N_n Nn,列三个方程,即可求解节点数、度数、边数中的未知量。

1)节点数方程:

N 0 + N 1 + N 2 + . . . + N n = Σ i = 1 n N i = N V N_0 + N_1 + N_2 + ... + N_n = \Sigma_{i=1}^{n}Ni = N_V N0+N1+N2+...+Nn=Σi=1nNi=NV

意义:各度数的节点的数量加起来,等于总节点数( N V N_V NV, number of vertices)

下图中 N V = 7 , N 0 = 4 , N 1 = 0 , N 2 = 3 N_V=7,N_0=4,N_1=0,N_2=3 NV=7,N0=4,N1=0,N2=3

2)度数方程:

0 ∗ N 0 + 1 ∗ N 1 + 2 ∗ N 2 + . . . + n ∗ N n = N E 0 * N_0 + 1 * N_1 + 2 * N_2 + ... + n * N_n = N_E 0N0+1N1+2N2+...+nNn=NE

意义:各度数节点的数量乘上对应度数之和,等于总度数(Ne, number of edges)

下图中 N E = 6 N_E=6 NE=6

3)度数与边数方程:

N E = N V − 1 N_E = N_V - 1 NE=NV1
每个节点都有一条连接父节点的边,而根节点没有,所以要减掉1

root
V1
V2
V3
V4
V5
V6

秒杀例题

例题
一棵二叉树,度为2结点数为70,度为1结点数为176,则叶子结点数为( ).

A.71

B.69

C.175

D.177

还是一样的例题,不过我们已经有备而来。
首先,这是一棵二叉树,所以每个节点的度数只可能是0,1,2
接着,标出已知量 N 1 = 176 , N 2 = 70 N_1=176,N_2=70 N1=176,N2=70,要求的是 N 0 N_0 N0
然后,列三道方程:
1)节点数: N 0 + N 1 + N 2 = N V N_0+N_1+N_2=N_V N0+N1+N2=NV
< = > N 0 + 176 + 70 = N V <=> N_0 + 176 + 70 = N_V <=>N0+176+70=NV

2)度数: 1 ∗ N 1 + 2 ∗ N 2 = N E 1 * N_1 + 2 * N_2 = N_E 1N1+2N2=NE
< = > 176 + 140 = N E <=>176+140=N_E <=>176+140=NE
< = > N E = 316 <=>N_E=316 <=>NE=316

3)度边数: N E = N V − 1 N_E = N_V - 1 NE=NV1
< = > 316 = N V − 1 <=>316 = N_V - 1 <=>316=NV1
< = > N V = 317 <=>N_V=317 <=>NV=317

代回到①中:
N 0 + 176 + 70 = N V = 317 N_0 + 176 +70 =N_V = 317 N0+176+70=NV=317
< = > N 0 = 71 <=>N_0=71 <=>N0=71

最终得到本题答案为A

### AVL树插入和删除操作解析 #### 插入操作 在AVL树中,当插入一个新的节时,可能会破坏原有的平衡条件 \(|h(ls) - h(rs)| \leq 1\)。为了恢复平衡,通常需要执行旋转操作。以下是具体的步骤: - **单旋转**:分为左旋和右旋两种情况。 - 左旋适用于新插入的节使得某个子树的右子树高增加的情况[^3]。 - 右旋则相反,用于处理左子树高增加的情形。 - **双旋转**:先进行一次反方向的单旋转再做同方向的一次单旋转。这主要用于更复杂的失衡场景。 下面是一个简单的例子来说明如何通过旋转保持AVL树的平衡状态: 假设我们依次向空的AVL树中插入关键字序列 {4, 2, 6, 5}: ```plaintext 初始为空 -> 插入4 -> 树形为: 4 / 2 / 6 / 5 ``` 由于连续两次向同一侧添加元素导致了不平衡,在这里我们需要对以'2'为根的子树应用RR(右-右)型调整即简单左转即可得到最终形态如下所示: ```plaintext 4 / \ 2 6 / 5 ``` 对于上述过程中的每一步都应计算各节的高差并判断是否超出允许范围(-1到+1之间),一旦发现违反规定就立即采取相应措施予以纠正直至整棵树重新达到稳定为止。 #### 删除操作 同样地,在移除某特定数值之后也可能引起局部乃至全局性的倾斜现象从而违背定义约束力矩不超过±1的规定。解决办法依然是依靠适当地运用四种基本形式之一或者组合它们来进行必要的结构调整直到恢复正常秩序为之结束。 举个实际案例帮助理解吧!比如我们要从刚才构建完成的那个小型AVL Tree里边删掉数字‘6’的话,具体流程大致如此这般模样呈现出来给大家看哈~ 第一步当然是定位目标位置啦~找到那个有待消除项的数据单元所在确切地咯~ 第二步就是考虑清楚这个动作会不会影响周围邻居们之间的关系链路啊之类的东东哦!!! 最后附上一段伪代码表示整个逻辑思路框架供参考学习之用: ```python def delete_node(root, key): # 执行标准BST删除程序... # 更新heights & check balance factor after deletion return balanced_root ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值