Java教程

二叉树父子关系+推导

本文主要是介绍二叉树父子关系+推导,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

这个是【从层序创建二叉树】中需要用到的【连接父子的两种方法】,需要根据下标连接。因此就需要【父子下标关系】。

 

 

//连接父子,两种办法:

 

// 1.计算父亲的下标

//   大前提:编号从0开始!

//   由2-结论,可以推出,编号j的父亲编号为(j-1)/2。

//   由2-副结论,可以推出,第j个结点的父亲是第j/2个结点。

//

 

// 2.计算孩子下标

//   大前提:编号从0开始!

//   结论:编号j的左孩子编号为1+2j。

//   副结论:第j个结点的左孩子是第2j个结点。

//

 

//   [推导过程]

//

//   当前j,求第一个孩子编号:

//      (1)第一个孩子编号=1+j+后面弟弟数+前面哥哥的孩子个数 (2)二叉树,前面哥哥的孩子个数=哥哥数*2

 

//   当前在这一层中排第几个至关重要:

//      (1)第k+1个,前面k个哥哥,后面num-k-1个弟弟。(2)k = j-前i层个数 = j-(num-1)

 

//   第一个孩子编号 = 1 + j + (num-k-1) + k*2 = 1 + j + { num - [ j-(num-1) ] -1 } + [ j-(num-1) ] * 2

//                 = 1 + j + { num - [ j-num+1 ] -1 } + 2j-2num+2

//                 = 1 + j + { num - j + num - 1 -1 } + 2j-2num+2

//                 = 1 + j + { 2num - j - 2 } + 2j-2num+2

//                 = 1 + 2j

 

//   结论:编号j的左孩子编号为1+2j。【这里的j是编号,是第j+1个结点!】

//

//   副结论:第j个结点的左孩子是第2j个结点。

//      第j+1个结点的左孩子是第(2j+2)个结点。即第j个结点的左孩子是第2j个结点!

//

//   我也太棒了吧,我自己推导出来的!!!赞赞赞!!!

 

这篇关于二叉树父子关系+推导的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!