二叉树的父子节点位置关系(学习笔记)
前言:
昨天晚上想sumtree插入值的时候,怎么都无法推导出来二叉树的父子节点索引的关系是2K+1和2K+2。
虽然我知道几个前提,早上过来的时候,搜了一下,果然有人做了详细的推导,我再重写一遍~
参考链接:
结论:
二叉树中父节点为k,它的左子节点下标为2k+1,右子节点是2k+2。
前提条件:
二叉树一个节点有2个子节点,左节点和右节点。
因此,可以将二叉树每一层的数量看做一个公比为2的等比数列。
如第一层也就是根节点的数量是
2
0
=
1
2^0=1
20=1,第二层
2
1
=
2
2^1=2
21=2,第三层
2
2
=
4
2^2=4
22=4,第k层
2
k
−
1
2^{k-1}
2k−1。
等比数列的求和公式为:
推导:
假设根节点下标从0开始;
因此第k层的最后一个节点下标为: 2 k − 1 − 1 2^k-1-1 2k−1−1,第一个节点为 2 ( k − 1 ) − 1 2^{(k-1)}-1 2(k−1)−1。
因此回归正文:
假设父节点为第k层第m个节点,则其下标为
F
=
2
(
k
−
1
)
+
m
−
1
−
1
=
2
(
k
−
1
)
+
m
−
2
F=2^{(k-1)}+m-1-1=2^{(k-1)}+m-2
F=2(k−1)+m−1−1=2(k−1)+m−2;
根据二叉树的关系,其子节点得走完第k层剩下的 2 k − 1 − m 2^{k-1}-m 2k−1−m个节点,且到下一层之后,还得加上左边m-1个父节点留下的子节点,再加本身的1个值。
即其左子节点的下标
C
=
F
+
(
2
k
−
1
−
m
)
+
(
m
−
1
)
∗
2
+
1
=
2
k
−
1
−
m
−
2
+
(
2
k
−
1
−
m
)
+
(
m
−
1
)
∗
2
+
1
=
2
k
+
2
m
−
4
+
1
=
2
∗
F
+
1
C=F+(2^{k-1}-m)+(m-1)*2+1=2^{k-1}-m-2+(2^{k-1}-m)+(m-1)*2+1=2^{k}+2m-4+1=2*F+1
C=F+(2k−1−m)+(m−1)∗2+1=2k−1−m−2+(2k−1−m)+(m−1)∗2+1=2k+2m−4+1=2∗F+1
即 左子节点=2*父节点+1
同理 右子节点=2*父节点+2
证明完成