翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
解题思路
二叉树翻转操作是指将二叉树中每个节点的左右子树进行交换。具体步骤如下:
- 1、如果当前节点为空,直接返回null。
- 2、递归地对当前节点的左子树和右子树进行翻转操作。
- 3、将当前节点的左子树和右子树进行交换。
- 4、返回当前节点作为根节点。
Java实现
public class BinaryTreeInverter {static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}}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;}// 测试实例public static void main(String[] args) {// 构造二叉树: 1// / \// 2 3// / \// 4 5TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);root.left.right = new TreeNode(5);// 创建 BinaryTreeInverter 实例BinaryTreeInverter inverter = new BinaryTreeInverter();// 翻转二叉树TreeNode invertedTree = inverter.invertTree(root);// 输出翻转后的二叉树结构System.out.println("翻转后的二叉树结构:");printTree(invertedTree);}// 递归打印二叉树结构private static void printTree(TreeNode root) {if (root == null) {return;}System.out.println(root.val);printTree(root.left);printTree(root.right);}
}
时间空间复杂度
- 时间复杂度:O(n),其中n是二叉树中的节点数,每个节点都需要访问一次。
- 空间复杂度:O(height),其中height是二叉树的高度,递归调用栈的深度。