二叉树空指针个数的理解

引言

二叉树在使用链式存储时,每一个结点都有两个指针,或者为空或者指向子结点。

二叉树所有空指针的个数为n+1是众所周知的事(n为二叉树结点个数),虽然不论哪种证明方法都仅仅是恒等式变形的结果,但去分析等式两边的意义是十分有助于理解关系本质的。

几种理解

1.以节点数为切入点

空指针数=1x度为1的结点数+2x度为0的结点数,再列出总节点数的两个等式,可以列出方程组并解出:

\left\{\begin{matrix}ans=n_1+2n_0 \\ n=n_1+n_2+n_0 \\ n=n_1+2n_2+1 \end{matrix}\right.\rightarrow \left\{\begin{matrix}n_2=n_0-1 \\ ans=n_1+2n_2+2=(n_1+2n_2+1)+1=n+1 \end{matrix}\right.

这样的作法并不是很直观,它是根据空指针数的产生来源直接列出未知数的表达式,然后根据足够数量的方程组数学上解出所需解。

 

2.以指针数为切入点

进一步思考树的数据结构,每个结点有两个指针,指针如果不为空,则对应指向一个儿子结点(或理解为关联一条到儿子结点的边)

故空指针数也可以视为总指针数(2n)减去非空的指针数(即边数,n-1),即

ans=2n-(n-1)=n+1

 

3.以递推方式动态理解

我们假设已经有了一颗树,其空指针数为ans,在其上添加结点以观察ans的动态变化情况。

将新的结点a连接到树上结点b,显然b的空指针数会减1,而a的两个指针都是空的,所以它会使树的空指针数加2,则综合a和b对ans的影响,树上添加一个结点后,可以得到一个递推式:

ans\rightarrow ans-1+2=ans+1

递推的条件是结点数的增加,故考虑初始条件,当树结点数为1,空指针数为2(或树空时,空指针数为1),则:

\left\{\begin{matrix}ans(1)=2 \\ ans(2)=ans(1)+1=3 \\ ... \\ ans(n)=ans(n-1)+1=n+1 \end{matrix}\right.

 

4.待补充

 

  • 25
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值