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天倒计时,蓝桥杯省赛备赛攻略来啦~
下一篇:
比较两个数还有三个数的大小