要求
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
思路
方法:递归
我们在做二叉树题目时候,第一想到的应该是用 递归 来解决。 其实就是交换一下左右节点,然后再递归的交换左节点,右节点;可以从中总结出递归的两个条件如下:
- 终止条件:当前节点为 null 时返回
- 交换当前节点的左右节点,再递归的交换当前节点的左节点,递归的交换当前节点的右节点
//如果使用自己编程工具,需要提前创建一个TreeNode类
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;
}
}
public class LeetCode226 {
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;
}
}
时间复杂度:每个元素都必须访问一次,所以是 O(n)
空间复杂度:最坏的情况下,需要存放 O(h) 个函数调用(h是树的高度),所以是 O(h)