这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
题目描述
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
4
/ \
2 7
/ \ / \
1 3 6 9
镜像输出:
4
/ \
7 2
/ \ / \
9 6 3 1
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码
思路分析
- 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。
- 在数据结构考察中,最基本的考察方式是树的遍历,包含前/中/后/层 序遍历。这种遍历题目,大家接触的比较多,解决题目一般比较顺利。
- 还有一种需要建立树结构返回,这种题目相对较少,多加练习就能掌握好。
- 解决树问题常见的思想是递归。程序调用自身的编程技巧称为递归(recursion)。
- 使用递归思想解决问题的时候,需要注意以下两点。1. 注意递归的终止条件,防止无限递归。2.将当前层处理的问题最小化,明确问题。
- 根据上述知识的铺垫,结合题目,镜像可以简单理解为左右子树调换位置。代码如下:
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if (root == null) {
return root;
}
return buildTree(root);
}
public TreeNode buildTree(TreeNode node) {
if (node == null) {
return null;
}
TreeNode newNode = new TreeNode(node.val);
newNode.left = buildTree(node.right);
newNode.right = buildTree(node.left);
return newNode;
}
}
复制代码
总结
- 上述算法时间复杂度是 O(n), 空间复杂度是O(n)
- 树的题目,只要勤加练习,都可以掌握!
- 坚持每日一题,加油!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END