题目描述
给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。
解题思路
翻转一棵二叉树意味着交换每个节点的左右子树。我们可以使用递归的方法,从根节点开始,对每个节点进行如下操作:
交换当前节点的左右子树。
递归地翻转当前节点的左子树。
递归地翻转当前节点的右子树。
递归的终止条件是当前节点为 null,即叶子节点。
解法
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}
}public class Solution {public TreeNode invertTree(TreeNode root) {// 递归终止条件if (root == null) {return null;}// 交换当前节点的左右子树TreeNode temp = root.left;root.left = root.right;root.right = temp;// 递归翻转左子树和右子树invertTree(root.left);invertTree(root.right);return root;}// 辅助函数:打印二叉树public void printTree(TreeNode root) {if (root != null) {System.out.println(root.val);printTree(root.left);printTree(root.right);}}public static void main(String[] args) {Solution solution = new Solution();// 构造二叉树// 4// / \// 2 7// / \ / \// 1 3 6 9TreeNode root = new TreeNode(4);root.left = new TreeNode(2);root.right = new TreeNode(7);root.left.left = new TreeNode(1);root.left.right = new TreeNode(3);root.right.left = new TreeNode(6);root.right.right = new TreeNode(9);// 执行翻转操作TreeNode invertedRoot = solution.invertTree(root);// 输出结果System.out.println("翻转后的二叉树:");solution.printTree(invertedRoot);}
}
时间复杂度分析
递归函数需要访问每个节点恰好一次,因此时间复杂度为 O(n),其中 n 是树中节点的数量。
空间复杂度分析
递归函数在递归过程中使用的栈空间的最大深度等于树的高度,最坏情况下,树是一个链表结构,高度为 n,因此空间复杂度为 O(n)。