226.翻转二叉树

This commit is contained in:
游由 2022-02-08 15:48:23 +08:00
parent a82ba4fb75
commit bd02130ba1
2 changed files with 89 additions and 0 deletions

View File

@ -43,6 +43,7 @@ mod q0198;
mod q0206;
mod q0213;
mod q0220;
mod q0226;
mod q0231;
mod q0258;
mod q0263;

View File

@ -0,0 +1,88 @@
use crate::Solution;
use std::rc::Rc;
use std::cell::RefCell;
use crate::structure::TreeNode;
impl Solution {
/// [226.翻转二叉树](https://leetcode-cn.com/problems/invert-binary-tree/)
///
/// 2022-02-08 13:35:42
///
/// 给你一棵二叉树的根节点 `root` ,翻转这棵二叉树,并返回其根节点。
///
/// **示例 1**
///
/// ![](https://assets.leetcode.com/uploads/2021/03/14/invert1-tree.jpg)
///
/// **输入:** root = \[4,2,7,1,3,6,9\]
/// **输出:** \[4,7,2,9,6,3,1\]
///
/// **示例 2**
///
/// ![](https://assets.leetcode.com/uploads/2021/03/14/invert2-tree.jpg)
///
/// **输入:** root = \[2,1,3\]
/// **输出:** \[2,3,1\]
///
/// **示例 3**
///
/// **输入:** root = \[\]
/// **输出:** \[\]
///
/// **提示:**
///
/// * 树中节点数目范围在 `[0, 100]` 内
/// * `-100 <= Node.val <= 100`
///
/// Related Topics
///
/// * 树
/// * 深度优先搜索
/// * 广度优先搜索
/// * 二叉树
///
/// * 👍 1165
/// * 👎 0
pub fn invert_tree(root: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc<RefCell<TreeNode>>> {
match root {
Some(node) => {
let mut p = node.borrow_mut();
Some(Rc::new(RefCell::new(TreeNode { val: p.val, left: Self::invert_tree(p.right.take()), right: Self::invert_tree(p.left.take()) })))
}
_ => None
}
}
}
#[cfg(test)]
mod test {
use crate::Solution;
use crate::structure::TreeNode;
use std::rc::Rc;
use std::cell::RefCell;
#[test]
fn test_q0226() {
let tree = Some(Rc::new(RefCell::new(TreeNode {
val: 1,
left: None,
right: Some(Rc::new(RefCell::new(TreeNode {
val: 2,
left: Some(Rc::new(RefCell::new(TreeNode::new(3)))),
right: None,
}))),
})));
let tree_inv = Some(Rc::new(RefCell::new(TreeNode {
val: 1,
left: Some(Rc::new(RefCell::new(TreeNode {
val: 2,
left: None,
right: Some(Rc::new(RefCell::new(TreeNode::new(3)))),
}))),
right: None,
})));
let ans = Solution::invert_tree(tree);
assert_eq!(ans, tree_inv);
}
}