JAVA练习306- 翻转二叉树
2026/7/23 4:35:25 网站建设 项目流程

题目概览

给你一棵二叉树的根节点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

来源:226. 翻转二叉树 - 力扣(LeetCode)

解题分析

方法一:递归

直接交换左右两边节点即可,左右节点的翻转再调用当前方法翻转即可,当节点为 null 时终止。

时间复杂度:O(n)
空间复杂度:O(n)

/** * 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 root; } TreeNode left = invertTree(root.left); TreeNode right = invertTree(root.right); root.left = right; root.right = left; return root; } }

方法二:迭代

用队列或栈都可以,用来存储根节点,每次出队列时交换左右节点,然后将左右节点入队列,直到队列为空。

时间复杂度:O(n)
空间复杂度:O(n)

/** * 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 root; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()) { TreeNode node = queue.poll(); TreeNode temp = node.left; node.left = node.right; node.right = temp; if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } return root; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询