今天这是一道简单题,解决方法是递归,遍历二叉树最简便的方法就是递归了,我们以递归三大要素对此题进行简单分析一下
第一要素:明确你这个函数想要干什么
在这道题中,我们需要定义一个传入任意二叉树根节点可以左右翻转二叉树的方法,代码如下
class Solution {
public TreeNode invertTree(TreeNode root) {
}
}
第二要素:寻找递归结束条件
递归是会不断的调用自己,如果没有结束条件,那么就会陷入死循环了,此题的结束条件有两个,
第一个就是当root == null时,需要结束,第二个是函数需要返回翻转之后的二叉树根节点,代码如下
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
//其他操作
return root;
}
}
第三要素:找出函数的等价关系式
我们要不断缩小参数的范围,缩小之后,我们可以通过一些辅助的变量或者操作,使原函数的结果不变,比如实例2中的二叉树,它的节点是比较少的,可以以此来推出等价关系式
如果只是翻转上面只有三个节点的二叉树,那么代码如下
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
return root;
}
}
然后我们把递归这个思想加到代码里来推出等价关系式,代码如下
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
TreeNode tmp = root.left;
root.left = invertTree(root.right);
root.right = invertTree(tmp);
return root;
}
}
这一步是比较难的,需要通过不断的练习,这里只是简单讲解了一下运用递归的方法
题目链接:题单 - 力扣(LeetCode)全球极客挚爱的技术成长平台