数组模拟二叉树
二叉树嘛,仔细想一下。
显而易见有以下结论:
节点 |
左儿子 |
右儿子 |
1 |
2 |
3 |
2 |
4 |
5 |
3 |
6 |
7 |
4 |
8 |
9 |
5 |
10 |
11 |
6 |
12 |
13 |
… |
… |
… |
n |
2n |
2n + 1 |
所以我们可以直接写成数组的形式。
因为对于一个i而言,左儿子是2i,右儿子是2i+1
假设我们需要N个叶子节点,那需要多大的空间?
稍微算一下就知道了 2N - 1
自己需要开N个,所有的父节点需要开 N-1个。
又因为a[0]是不能用的,所以最少需要开 2N。
但是a[0]可以记录树的节点数量 #define cnt a[0]
所以二叉树:
const int N =