之前是读者,现在是笔者。距离保研成功已经有一段时间了,在找实习的过程中发现自己算法能力亟待提升,之前看到有人用CSDN当作笔记进行学习(或者赚钱),于是今天突发奇想,想要尝试一下。欢迎各位批评指正,所学内容来自b站、百度或书籍等等。
满二叉树
若一棵树的深度为k,且结点数满足2^k-1,则为满二叉树。就是说一个结点,或者独自一人,或者同一层的结点都要有双胞胎。
完全二叉树
满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。完全二叉树要保证n-1层是满的,第n层要么是满的,要么结点都要以从左往右的顺序排列。
可以使用链表来存储树,但由于一个结点需要存当前数据以及其左右结点,如果结点过多就会导致开销过大,对于完全二叉树,可以采用数组的方式进行存储。
若A的下标为1,可以看到A的左孩子为B,在数组中的位置为2,右孩子C的下标为3,B的左孩子为D,下标为4,有孩子E下标为5.因此可以得到,若当前结点下标为n,则当前结点左孩子的下标为2n,右孩子下标为2n+1。