踩雷:翻转的是树,而不是翻转的左右子节点的值。直接交换左右子树的根节点,而不是交换左右子树根节点的val值(从下往上+从左往右:依次交换二叉树的左右节点)
对比类似相同的题型:
二叉树的最大深度
醒悟:递归结束时,递归函数的结果=递归函数传入参数的属性
例如: TreeNode leftNode=invertTree(root.left);递归结束时,就是以root.left的为根节点的树,已经进行了翻转;并返回root.left这个节点,即此时有:leftNode=root.left。(递归的结束:来自于下一步的回溯返回值或者遇到当前递归的终止条件)
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null){
return root;//结束递归,此时已经到达叶子结点
}
//当前root节点的左节点递归
TreeNode leftNode=invertTree(root.left);//这个递归结束时,leftnode=root.left
//当前root节点的右节点递归
TreeNode rightNode=invertTree(root.right);//这个递归终止时,rightNode=root.right
root.left=rightNode;
root.right=leftNode;
return root;//注意返回的原来那个root节点,用于回溯
}
}