引言
二叉树在使用链式存储时,每一个结点都有两个指针,或者为空或者指向子结点。
二叉树所有空指针的个数为n+1是众所周知的事(n为二叉树结点个数),虽然不论哪种证明方法都仅仅是恒等式变形的结果,但去分析等式两边的意义是十分有助于理解关系本质的。
几种理解
1.以节点数为切入点
空指针数=1x度为1的结点数+2x度为0的结点数,再列出总节点数的两个等式,可以列出方程组并解出:
这样的作法并不是很直观,它是根据空指针数的产生来源直接列出未知数的表达式,然后根据足够数量的方程组数学上解出所需解。
2.以指针数为切入点
进一步思考树的数据结构,每个结点有两个指针,指针如果不为空,则对应指向一个儿子结点(或理解为关联一条到儿子结点的边)
故空指针数也可以视为总指针数(2n)减去非空的指针数(即边数,n-1),即
3.以递推方式动态理解
我们假设已经有了一颗树,其空指针数为ans,在其上添加结点以观察ans的动态变化情况。
将新的结点a连接到树上结点b,显然b的空指针数会减1,而a的两个指针都是空的,所以它会使树的空指针数加2,则综合a和b对ans的影响,树上添加一个结点后,可以得到一个递推式:
递推的条件是结点数的增加,故考虑初始条件,当树结点数为1,空指针数为2(或树空时,空指针数为1),则:
4.待补充