LeetCode 全题解计划之树专题:LC 226(一)
LC 226 翻转二叉树(E)
题目描述
-
翻转一棵二叉树。
举个栗子
-
示例: 输入: 输出:
解题思路
-
我们在做二叉树题目时候,第一想到的应该是用递归来解决。 仔细看下题目的输入和输出,输出的左右子树的位置跟输入正好是相反的,于是我们可以递归的交换左右子树来完成这道题。 其实就是交换一下左右节点,然后再递归的交换左节点,右节点。 我们可以总结出递归的两个条件如下: 终止条件:当前节点为 null 时返回。 交换当前节点的左右节点,再递归的交换当前节点的左节点,递归的交换当前节点的右节点。 时间复杂度:每个元素都必须访问一次,所以是 O(n)。 空间复杂度:最坏的情况下,需要存放 O(h) 个函数调用(h 是树的高度),所以是 O(h)。
代码来了
/**
* 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 null;
}
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}
上一篇:
92天倒计时,蓝桥杯省赛备赛攻略来啦~
下一篇:
比较两个数还有三个数的大小
