LeetCode热题100--226. 翻转二叉树--简单
1. 题目
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
示例 2:
输入:root = [2,1,3]
输出:[2,3,1]
示例 3:
输入:root = []
输出:[]
2. 题解
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode invertTree(TreeNode root) {if(root == null){return null;}TreeNode tmp = root.right;root.right = root.left;root.left = tmp;invertTree(root.left);invertTree(root.right);return root;}
}
3. 解析
-
public TreeNode invertTree(TreeNode root): 这是主方法,接收一个类型为TreeNode的参数root。这个参数表示二叉树的根节点。
-
if(root == null){ return null; }: 如果输入的根节点(也就是整个二叉树)不存在,那么返回null。这是递归调用结束的基本情况。
-
TreeNode tmp = root.right;: 这一行创建了一个临时变量tmp来保存原来的右子树。这是因为我们稍后需要将左子树移到右边(反转),所以需要先保存下来。
-
root.right = root.left;: 这一行将根节点的右孩子指针指向左子树。我们在执行这个操作之前已经将原来的右子树保存在tmp中了,因此我们可以安全地将其赋值给新的右子树位置。
-
root.left = tmp;: 最后,我们将根节点的新左子树设置为我们刚刚保存的原始右子树(现在位于tmp中)。
-
invertTree(root.left); 和 invertTree(root.right);: 然后我们递归地对左子树和右子树调用invertTree()方法,以确保整个二叉树都被反转了。如果某个子树为空(意味着这个分支的原始树是叶节点或空树),那么这两个函数调用将简单地返回null,这是我们期望的结果。
-
return root;: 最后,返回翻转后的根节点。在递归过程中,这个值会被层层向上传递,最终成为整棵树的新根节点并作为函数的输出返回。