二叉树—完全二叉树子节点编号证明(为什么2n+1)
一、 左子树
求证:完全二叉树中任何一层的最左节点的编号为n,则其左子节点编号为2n+1,其右子节点编号为2n+2(编号从0开始)。
证明:
因为
- 完全二叉树第n层的节点数:2^(n-1)
- 所以第n层最左边的节点编号:2^(n-1)-1
- 第n层最左边节点的左子树节点编号(即第n+1层最左边的节点编号):2^(n)-1
- 2*(2^(n-1)-1)+1 = 2^(n)-1
所以
完全二叉树中任何一层的最左节点的编号为n,则其左子节点编号为2n+1,其右子节点编号为2n+2。
二、 任意节点
求证:完全二叉树任意节点编号n,则其左子节点为2n+1,其右子节点编号为2n+2(编号从0开始)。
证明:
因为
- 任取一个节点N,设编号为n。
- 设N所在层L的最左节点为M,编号为m。
- 显然,L层中位于N左边的节点为n-m个。
- N的左子节点N_Left位于L+1层,第L+1层中在N_Left前面的节点数为2(n-m)。
- 由证明1得,L+1层的最左节点为2m+1。
所以
N_Left的编号为2m+1+2(n-m),即2n+1。得证!