👨💻博客主页:@花无缺
欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
本文由 花无缺 原创收录于专栏 【力扣题解】
文章目录
- 【力扣题解】P226-翻转二叉树-Java题解
- 🌏题目描述
- 💡题解
- 🌏总结
【力扣题解】P226-翻转二叉树-Java题解
P226.翻转二叉树
🌏题目描述
给你一棵二叉树的根节点 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
💡题解
递归法:
public TreeNode invertTree(TreeNode root) {// 节点为空, 递归终止if (root == null) {return root;}// 交换当前节点的左右子树TreeNode node = root.left;root.left = root.right;root.right = node;// 递归翻转左子树invertTree(root.left);// 递归翻转右子树invertTree(root.right);// 返回递归后的二叉树return root;
}
时间复杂度:O(n)
,需要访问树的所有节点,节点数为 n。
迭代法:
// 前序遍历迭代
public TreeNode invertTree(TreeNode root) {if (root == null) {return root;}Deque<TreeNode> stack = new LinkedList<>();stack.offerLast(root);while (!stack.isEmpty()) {TreeNode node = stack.pollFirst();// 交换当前节点的左右子树TreeNode temp = node.left;node.left = node.right;node.right = temp;if (node.right != null) {stack.offerLast(node.right);}if (node.left != null) {stack.offerLast(node.left);}}return root;
}
时间复杂度:O(n)
,需要访问树的所有节点,节点数为 n。
🌏总结
这道题使用递归很简单,就是递归的交换节点的左右子树,最后返回根节点,就可以完成二叉树的翻转。
那么怎么使用迭代来做呢,其实使用前序、中序、后序和层次遍历的迭代法都可以做这道题,在迭代法中遍历到一个节点的时候,就交换这个节点的左右子树,这样就达到了翻转整个二叉树的效果。这里我采用的是前序遍历迭代法,当栈顶节点出栈时,就交换它的左右子树,当访问完所有节点后,整个二叉树就完成了翻转。
作者:花无缺(huawuque404.com)
🌸欢迎
关注
我的博客:花无缺-每一个不曾起舞的日子都是对生命的辜负~
🍻一起进步-刷题专栏:【力扣题解】
🥇往期精彩好文:
📢【CSS选择器全解指南】
📢【HTML万字详解】
你们的点赞👍 收藏⭐ 留言📝 关注✅
是我持续创作,输出优质内容
的最大动力!
谢谢!