代码随想录day14 翻转二叉树 | 对称二叉树 | 二叉树的最大深度 | 二叉树的最小深度
翻转二叉树
翻转二叉树
本题有多种解法,在这里我推荐用层次遍历,因为非常直观清晰。
解题思路
我们只需要对每一层的结点反转顺序即可(当上一层的节点反转顺序后,其子节点也会跟随,这个是解题的关键。具体实现时,我们使用堆栈,和之前的队列不同,因为这里需要反转。
知识点
堆栈,二叉树的层次遍历
心得
一道复习层次遍历的题目
对称二叉树
解题思路
这道题采用非递归的方式比较好理解,通过队列或者栈将每个节点的左右节点压入,随后每次弹出两个进行逻辑处理:当两个值其中有一个是null或者不相等时,就不是对称节点。当两个值都为null时则跳过。
知识点
队列
心得
一开始做的时候没想到null时可以直接跳过继续遍历堆栈,导致没有写出来。
【二刷】需要注意的是处理两个结点的逻辑,当两个结点为空以及值相等时符合条件,其余都不符合条件,迭代顺序则注意树的内侧和外侧
二叉树的最大深度
解题思路
本题有多种解法,在这里推荐使用层序遍历,简单清晰。最大深度起始就是问该二叉树有多少层。
知识点
队列,二叉树的深度,二叉树的高度
心得
简单的层序遍历
二叉树的最小深度
解题思路
注意,整体思路和最大深度相同,但本题的关键是找到没有子节点的叶子节点。此外当使用递归的方法时,还需考虑当一个节点只有左或者右节点的时候并不代表找到最小深度,而是要继续遍历往下找。
知识点
二叉树的层次遍历,前序遍历
心得
一道复习二叉树遍历的算法题