算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)

Posted 二当家的白帽子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)相关的知识,希望对你有一定的参考价值。


文章目录


剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树:

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

例如输入:

     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]

限制:

  • 0 <= 节点个数 <= 1000

分析

  • 面对这道算法题目,二当家的陷入了沉思。
  • 仔细思考就会发现啊,其实就是把每个节点的左右孩子交换。
  • 而树结构的遍历太适合用递归套娃大法了。

题解

rust

// Definition for a binary tree node.
// #[derive(Debug, PartialEq, Eq)]
// pub struct TreeNode 
//   pub val: i32,
//   pub left: Option<Rc<RefCell<TreeNode>>>,
//   pub right: Option<Rc<RefCell<TreeNode>>>,
// 
// 
// impl TreeNode 
//   #[inline]
//   pub fn new(val: i32) -> Self 
//     TreeNode 
//       val,
//       left: None,
//       right: None
//     
//   
// 
use std::rc::Rc;
use std::cell::RefCell;
impl Solution 
    pub fn mirror_tree(root: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc<RefCell<TreeNode>>> 
        if root.is_some() 
            let mut mb = root.as_ref().unwrap().borrow_mut();
            let left = Solution::mirror_tree(mb.left.take());
            let right = Solution::mirror_tree(mb.right.take());
            mb.left = right;
            mb.right = left;
        
        return root;
    


go

/**
 * Definition for a binary tree node.
 * type TreeNode struct 
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * 
 */
func mirrorTree(root *TreeNode) *TreeNode 
    if root != nil 
		left := mirrorTree(root.Left)
		right := mirrorTree(root.Right)
		root.Left = right
		root.Right = left
	
	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) 
            TreeNode *left = mirrorTree(root->left);
            TreeNode *right = mirrorTree(root->right);
            root->left = right;
            root->right = left;
        
        return root;
    
;

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) 
            TreeNode left = mirrorTree(root.left);
            TreeNode right = mirrorTree(root.right);
            root.left = right;
            root.right = left;
        
        return root;
    


python

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def mirrorTree(self, root: TreeNode) -> TreeNode:
        if root:
            left = self.mirrorTree(root.left)
            right = self.mirrorTree(root.right)
            root.left = right
            root.right = left
        return root


原题传送门:https://leetcode.cn/problems/er-cha-shu-de-jing-xiang-lcof/

原题传送门:https://leetcode.cn/problems/invert-binary-tree/


非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


以上是关于算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)的主要内容,如果未能解决你的问题,请参考以下文章

算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)

Leetcode二叉树专题(仅需7道题就可以带你入门二叉树基本玩法)

[LeetCode]剑指 Offer 27. 二叉树的镜像

LeetCode 剑指 Offer 37. 序列化二叉树

一文通数据结构与算法之——二叉树+常见题型与解题策略+Leetcode经典题

二叉树镜像问题——Offer. 27&28