二叉树篇

2020-02-29  本文已影响0人  Gyu2233

所有的题目,都必须先考虑递归边界和特殊情况,不要一上来就递归建树

重建二叉树
通过前序遍历和中序遍历,重建二叉树,是一个老生常谈的问题


树的子结构
简单,就不详细展开了,看代码立刻懂


二叉树的镜像
理解概念,逐层交换,适时递归


二叉搜索树的后序遍历序列
有点意思的题目,但是万变不离其宗,递归写法总是往左右子树递归下去的,牢记这一点。
然后,在二叉搜索树的后序遍历序列中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点;第二部分是右子数节点的值,它们都比根节点的值
按照这个特性,我们就可以找出左子树部分和右子数部分,并递归下去,问题就迎刃而解了。


二叉树中和为某一值的路径
emmmm,没什么好讲的,模拟一下即可。


二叉搜索树与双向链表
利用二叉搜索树的中序遍历,同时也要了解双向链表的情况
附上空间复杂度为O(1)的解法


二叉树的深度
经典好题,也是队列的好利用


平衡二叉树
平衡二叉树的特性有三个,分别是:
(1)树的左右高度差不超过1
(2)子树也符合性质(1)
(3)没有任何节点的空树或只有根节点的树也是平衡二叉树


对称的二叉树
与二叉树的镜像联系起来就容易理解了


**按之字形顺序打印二叉树
必须学会这个题目,面试到的概率非常大
类似题目


字符串与二叉树结合起来考察
练手好题,mark一下


二叉搜索树的第k小节点
利用二叉搜索树的中序遍历序列便是升序序列,可以轻易地查到第k小节点,注意递归边界的设置


压轴题
思路:先用java集合PriorityQueue设置一个大顶堆和小顶堆。
大顶堆用来存较小的数,从大到小排列;
小顶堆存较大的数,从小到大排列;并且保证小顶堆中的数>=大顶堆中的数
如何做到上面的保证呢? 不难,设置一个计数器count,从0开始,从数据流中每插入一个数,

最后,数据流的数据都插入这两个堆后;
如果count为偶数,则取大顶堆和小顶堆的两个根节点并取平均值返回;如果count为奇数,则取小顶堆的根节点返回。

上一篇 下一篇

猜你喜欢

热点阅读