数据结构 —— 已知一棵完全二叉树的节点数n,求叶节点数

题目如题,假设完全二叉树中,度为0的节点(即叶节点)数目为n0,度为1的节点数为n1,度为2的数目为n2,总数为n

首先,我们得知道两个公式

(1)结点总数满足:
n = n 0 + n 1 + n 2 n = n_0 + n_1 + n_2 n=n0+n1+n2

(2)出度、入度,即分支数满足:
n − 1 = 0 ⋅ n 0 + 1 ⋅ n 1 + 2 ⋅ n 2 n - 1 = 0·n_0 + 1·n_1 + 2·n_2 n1=0n0+1n1+2n2

根据 ( 1 ) , ( 2 ) (1),(2) (1),(2)可得 n 0 = n 2 + 1 = n − 1 − n 1 2 + 1 n_0 = n_2 + 1 = \frac{n-1 - n_1}{2} + 1 n0=n2+1=2n1n1+1,但我们还是不能求出叶子节点数,我们还少了条件:

  • 如果节点总数是偶数,则 n 1 = 1 n_1 = 1 n1=1
  • 如果节点总数是奇数,则 n 1 = 0 n_1 = 0 n1=0

由此则有: n 0 = n − 1 − ( n + 1 ) % 2 2 + 1 n_0 = \frac{n-1 - (n+1) \% 2}{2} + 1 n0=2n1(n+1)%2+1,若我们假设 n = 2019 n = 2019 n=2019,则有 n 0 = ( 2019 − 1 ) − ( 2019 + 1 ) % 2 2 + 1 = 1010 n_0 = \frac{(2019-1) - (2019+1)\%2}{2} + 1= 1010 n0=2(20191)(2019+1)%2+1=1010

  • 36
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值