翻转二叉树
给你一棵二叉树的根节点 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 5
TreeNode 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是二叉树的高度,递归调用栈的深度。