大家好!我是曾续缘😝
今天是《LeetCode 热题 100》系列
发车第 38 天
二叉树第 3 题
❤️点赞 👍 收藏 ⭐再看,养成习惯
给你一棵二叉树的根节点
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 = [] 输出:[]提示:
难度:❤️
- 树中节点数目范围在
[0, 100]
内-100 <= Node.val <= 100
解题方法
这道题目是关于二叉树的翻转操作,我们需要翻转给定的二叉树,并返回翻转后的根节点。在解决这个问题时,我们可以使用递归的方法来实现二叉树的翻转。
- 判断节点是否为空:首先,我们判断当前节点是否为空,如果为空则直接返回空节点。
- 交换左右子树:然后,我们交换当前节点的左右子树。
- 递归处理左右子树:接着,对交换后的左右子树分别进行递归操作,即对左右子树分别进行翻转操作。
- 返回根节点:最后,返回根节点。
当然,也可以先递归处理左右子树再交换左右子树,即步骤2和3调换顺序。
掌握了如何处理根节点、左子树和右子树,对于树的递归问题就已经解决了一大部分。
Code
查看代码
C++
/**
* 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.left;
root.left = root.right;
root.right = tmp;
root.right = invertTree(root.left);
root.left = invertTree(root.right);
return root;
}
}
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null){
return null;
}
TreeNode right = invertTree(root.left);
TreeNode left = invertTree(root.right);
root.left = left;
root.right = right;
return root;
}
}