网易2017实习生招聘笔试题-Java开发工程师
把4,7,11,10,13,9按顺序插入形成平衡二叉树的高度是几
A 3
B 4
C 5
D 6
具体选项忘记了
个人参考答案:高度为3
基础知识点扩展:
满二叉树:
每一层节点数均达最大值
完全二叉树:
除了最外层,其余层上节点数均达最大值,且最外层节点均集中在左侧
二叉排序树又称二叉查找树,亦称二叉搜索树:
左子树上的值均小于或等于根结点的值,右子树上的值均大于或等于根结点的值;左、右子树也分别为二叉排序树;
平衡二叉树是二叉查排序/查找树(即上面)的一种
是二叉查排序/查找树(即上面)的一种,又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1
如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态。
这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。
但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。
哈弗曼树(最优二叉树)
带权路径长度最短的树
为什么需要定义平衡二叉树
2
/ \
1 3
当上面的树变为下方的情况时,退化为了链表,效率将大大降低,因此需进行旋转操作
1
\
2
\
3
旋转操作
举例
题目解析:
依次插入4,7,11,10,13,9
平衡二叉树为二叉搜索/排序树的一种,插入操作需满足左子节点比根节点小,右子节点比根节点大
当然每个节点左右子树的高度之差不能超过1
依次先插入4,7,11; 4为根节点,7比4大,所以7为4的右节点,11为7的右节点:
4
\
7
\
11
此时不平衡,为“右右”,需单旋转:
7
/ \
4 11
继续插入10,比11小,放在11左节点,13比11大放在10的右节点
7
/ \
4 11
/ \
10 13
继续插入9,比10小,放在10左节点
7
/ \
4 11
/ \
10 13
/
9
此时不平衡,为“右左”,需双旋转:
7 10
/ \ / \
4 11 -> 7 11
/ \ / \ \
10 13 4 9 13
/
9