如何快速刷二叉树算法??

1. 二叉树子结构问题

【基操】100. 相同的树
【基操进阶】572. 另一个树的子树
思路:首先判断是否“相同的树”,然后递归左子树||递归右子树判断。
【基操进阶】剑指 Offer 26. 树的子结构

【树的子结构进阶】1367. 二叉树中的列表

【基操进阶】剑指 Offer 28. 对称的二叉树
思路:递归的时候,传入参数不同。
思路:和相同的树的区别是当subRoot为空,而root不为空的情况下,返回true。
【另一种思维】652. 寻找重复的子树

2. 验证二叉搜索树问题

【基操-借助极值完成boolean判断】98. 验证二叉搜索树
【基操进阶版】1008. 前序遍历构造二叉搜索树
【另一种思维】剑指 Offer 33. 二叉搜索树的后序遍历序列
思路:[左子树][右子树][根],这是后续遍历的顺序。通过[根]可以确定[左子树]和[右子树]两个数组,若右子树中存在元素,小于[根]的值,那么返回false。

3. 深度系列

【基操-自底而上】104. 二叉树的最大深度
【基操-必练】111. 二叉树的最小深度
【基操-自顶而下】513. 找树左下角的值
上面两种基操是“自底而上”计算深度。而本题需要返回最深节点值。所以是“自上而下”获取深度,思路就是使用“int 的值传递来保留长度。”
【基操进阶-推荐】543. 二叉树的直径
思路:依旧是获取二叉树最大深度,借助全局变量。通过Math.max函数来计算两个子树最大深度之和。
【基操进阶-推荐】110. 平衡二叉树
平衡二叉树:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
思路:获取左右子树的最大深度,判断最大深度的绝对值是否超过1,若超过1直接返回false。
【基操进阶-推荐】1123. 最深叶节点的最近公共祖先
思路:还是获取左右子树的最大深度,若最大深度相等,则是公共祖先。
【二叉树直径进阶-自底而上】687. 最长同值路径
自底而上计算深度

  1. 若root节点的值和节点的左子节点值相同则+1,若不同,则值路径归0,返回左子树最大同值路径。
  2. 若root节点的值和节点的右子节点值相同则+1,若不同,则值路径归0,返回右子树最大同值路径。

因为均和root节点进行比较得到同值逻辑,故最长的同值路径可以相加。使用全局变量来进行存储。
【二叉树直径进阶-自底而上】563. 二叉树的坡度
自底而上的计算每一子树的值。左右子树相减,使用全局变量来进行存储。

你可能感兴趣的:(如何快速刷二叉树算法??)