二叉树重点题目
二叉树算法有两大类,一类是遍历二叉树的类型,一类是分解子问题的类型
前者运用二叉树的递归遍历框架即可;后者关键在于明确递归函数的定义,然后利用这个定义。
105.从前序与中序遍历序列构造二叉树
106.从中序与后序遍历序列构造二叉树
654.最大二叉树
注:首先遍历存储数组在一个Hashmap中,比每次调用都遍历一次效率高。
“用空间换取时间”
111.二叉树的最小深度(DFS 以及 BFS)待补充
当树的递归有返回值时,需要考虑返回的值怎么“带回”上一层。并且结束递归时是在根节点上操作的。
114.二叉树展开成链表
注:二叉树的递归可以在三个位置进行操作分为:前序 中序 后序
并且递归需要站在全局的角度思考 需要思考两个重要环节:1、递归结束的条件;2、递归中间普遍步骤;
116.填充每个节点的下一个右侧节点指针
考虑每一个每次递归该结点需要做的工作——也许不只需要考虑两个左右子节点,可能需要跨越多层考虑!!!
222.完全二叉树的节点个数
a二叉树路径可以看成二进制的路线即(0指左节点,1指右节点)
在此基础上可以对最后一排使用二分查找,注意完全二叉树的节点个数规则!!
位运算:
<<
>>
>>=
&
|
652.寻找重复子树
后续遍历——先遍历左子节点,再遍历右子节点,最后遍历父节点 ,所以可以同时考虑“左右子树的情况”(仔细体会)。
当需要观察整个树的情况时,可以将其变成字符串考虑,即 序列化二叉树。
当需要考虑是否有重复的情况时,考虑set和map(可以在任何数据结构中使用)。
297.二叉树的序列化与反序列化
字符串可以用固定字符隔离开比如 “," 用.split(",")函数可以分割成数组。
序列化二叉树可以采用前序遍历。