力扣题目
解题思路
java代码
力扣题目:
给定一棵二叉树的根节点 root
,请左右翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [5,7,9,8,3,2,4] 输出:[5,9,7,4,2,3,8]
提示:
- 树中节点数目范围在
[0, 100]
内 -100 <= Node.val <= 100
解题思路:
算法原理:
这道题使用递归的方法来翻转二叉树。
思路:
对于二叉树的每个节点,先递归地翻转其左右子树,然后交换左右子节点的位置。
代码分析:
- 在
invertTree
方法中,如果节点为空则直接返回空。 - 分别递归地处理左右子树,获取翻转后的子树。
- 交换当前节点的左右子节点,完成当前节点的翻转。
时间复杂度:O(h),其中 n
是二叉树的节点数量。因为需要遍历每个节点一次。
空间复杂度:O(n),其中 h
是二叉树的高度。递归调用的栈空间取决于树的高度。在最坏情况下,树是一条链,空间复杂度为 O(h);在最好情况下,树是完全平衡的,空间复杂度为O(logh) 。
java代码:
package com.example.lib;
public class LCR144 {
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
LCR144 lcr144 = new LCR144();
lcr144.invertTree(root);
// 打印一棵树
TreeNode.printTree(root);
}
// 翻转二叉树
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
TreeNode left = invertTree(root.left);
TreeNode right = invertTree(root.right);
root.left = right;
root.right = left;
return root;
}
}
更多详细内容同步到公众号,感谢大家的支持!
每天都会给刷算法的小伙伴推送明日一题,并且没有任何收费项