目录
226.翻转二叉树 (优先掌握递归)
题目链接/文章讲解/视频讲解:代码随想录
思路
看图示可以发现是结点相互交换,同时结点的子结点也要跟着结点交换
递归
用前序和后序最方便
前序遍历:
第一步要确定递归函数的返回值和参数
第二步找到终止条件,碰到空结点终止
根据前序遍历的规则:中左右,那么先处理的应该是根节点,即交换其左右子孩子
然后依次遍历处理左、右孩子
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null)return root;
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}
为什么中序遍历不可以
规则为:左中右,先遍历该二叉树的左子树,然后依次向上return,直到整个二叉树的根,反转整个树的左右子树,此时并未遍历翻转的右子树变成了左子树,而后开始遍历右子树(也就是刚刚翻转遍历的左子树),这样一来,原左子树翻转了两遍,而原右子树并未翻转,最后的结果就是只是左右子树翻转一次
101. 对称二叉树 (优先掌握递归)
先看视频讲解,会更容易一些。
题目链接/文章讲解/视频讲解:代码随想录
104.二叉树的最大深度 (优先掌握递归)
什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。
大家 要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。
题目链接/文章讲解/视频讲解: 代码随想录
111.二叉树的最小深度 (优先掌握递归)
先看视频讲解,和最大深度 看似差不多,其实 差距还挺大,有坑。
题目链接/文章讲解/视频讲解:代码随想录