每日leetcode二叉树的镜像
Posted 小夕学算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日leetcode二叉树的镜像相关的知识,希望对你有一定的参考价值。
小夕的公众号发文方式
-
由于公众号的改版,如果不经常发文的话,小夕的读者朋友们会收不到小夕的写的文字,因此天天发文就很必要 -
但小夕的一篇漫画算法原创文章, 大概需要5-10个小时的耗时,动画+漫画的那些图片制作起来非常费时间! -
所以为了既天天发文,又能保持高质量的漫画算法原创文章的更新,现绝对用如下的发文方式
之前的原创动漫漫画算法文
戳一下即可进行跳转哦~
发文方式
-
小夕会天天更新文章,文章以小夕的每日在 算法刷题群公布的题目的题解为主,另外每天小夕会在文章中聊一下在 大厂百度(嗯~是的 小夕在百度工作
)的遇到的问题和一些工作经验( 注意这些文章以每天刷题为主,所以这些文章第二天就会删除,所以请紧随小夕的步伐刷题,后续看情况再议,目前是决定当天发文,第二天删文) -
小夕的漫画算法原创文章会保持一周1-2篇的更新 -
这样小夕既能天天发文保持天天更新,又能保证高质量的算法原创文章了~
题目
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof
二叉树镜像定义
题解
如上图所示,依次交换左右节点。递归结束的条件:
-
节点为null -
节点是叶子节点,那左右节点都是null,所以没必要交换了呀,直接结束
复杂度
-
时间复杂度:每个元素都必须访问一次,所以是O(n) -
空间复杂度:最坏的情况下,需要存放O(h)个函数调用(h是树的高度),所以是O(h)
动画
出自https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/solution/dong-hua-yan-shi-liang-chong-shi-xian-mian-shi-ti-/
Java
/**
* 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 null;
}
if(root.left == null && root.right == null) return root;
TreeNode temp = root.right;
root.right = root.left;
root.left = temp;
mirrorTree(root.right);
mirrorTree(root.left);
return root;
}
}
JS
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var mirrorTree = function(root) {
if (!root) {
return null;
}
if(!root.left && !root.right) {
return root; // 叶子节点直接返回
}
// 交换当前节点的左右节点
const temp = root.left;
root.left = root.right;
root.right = temp;
// 对左右子树做相同操作
mirrorTree(root.left);
mirrorTree(root.right);
return root;
};
C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if(!root) return nullptr;
if(!root->left && !root->right) return root;
mirrorTree(root->left);
mirrorTree(root->right);
swap(root->left, root->right); // 交换左右节点
return root;
}
};
Python
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def mirrorTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
if not root:
return None
root.left,root.right = root.right,root.left // 交换左右节点
self.mirrorTree(root.left)
self.mirrorTree(root.right)
return root
php
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($value) { $this->val = $value; }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @return TreeNode
*/
function mirrorTree($root) {
if($root==null){
return ;
}
$tmp = $root -> right;
$root->right = $root->left;
$root->left = $tmp;
$this->mirrorTree($root->left);
$this->mirrorTree($root->right);
return $root;
}
}
小夕最后有话说
-
动画、漫画、加6种编程语言(Java、C++、PHP、GO、Python、JS)的讲解很费心血,希望大家能帮忙转发到朋友圈和身边的朋友, 这样小夕的文章能让更多的人看见的话,小夕会更有动力更新文章的呀~。
-
公众号后台回复 打卡 查看公众号福利 坚持转发文章到朋友圈,小夕送上100元的红包给你,谢谢铁杆粉丝的支持。 -
加小夕微信 tiehanhan12342 拉你进算法刷题群。
以上是关于每日leetcode二叉树的镜像的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode(剑指 Offer)- 27. 二叉树的镜像