提交 93a7b038 编写于 作者: 梦境迷离's avatar 梦境迷离

rust leetcode 101

上级 0c6ae412
......@@ -16,6 +16,7 @@ Leetcode Rust 实现
* [面试题 54 二叉搜索树的第k大节点](src/interview_54.rs)
* [面试题 32 - II. 从上到下打印二叉树 II](src/interview_32_2.rs)
* [100 相同的树](src/leetcode_100.rs)
* [101 对称二叉树](src/leetcode_101.rs)
## 链表&栈&队列
......
use std::borrow::Borrow;
use std::cell::RefCell;
use std::rc::Rc;
use crate::pre_structs::{Solution, TreeNode};
///101. 对称二叉树
impl Solution {
///unsafe一把梭
pub fn is_symmetric(root: Option<Rc<RefCell<TreeNode>>>) -> bool {
fn is_mirror(
left: &Option<Rc<RefCell<TreeNode>>>,
right: &Option<Rc<RefCell<TreeNode>>>,
) -> bool {
match (left.borrow(), right.borrow()) {
(Some(l), Some(r)) => unsafe {
if (*l.as_ptr()).val == (*r.as_ptr()).val {
is_mirror(&(*l.as_ptr()).left, &(*r.as_ptr()).right)
&& is_mirror(&(*l.as_ptr()).right, &(*r.as_ptr()).left)
} else {
false
}
},
(None, None) => true,
(_, _) => false,
}
}
let l = root.clone();
let r = root.clone();
is_mirror(&l, &r)
}
}
#[cfg(test)]
mod test {
use std::cell::RefCell;
use std::rc::Rc;
use crate::pre_structs::{Solution, TreeNode};
#[test]
fn is_symmetric() {
let e2 = Some(Rc::new(RefCell::new(TreeNode {
val: 2,
left: None,
right: None,
})));
let e1 = Some(Rc::new(RefCell::new(TreeNode {
val: 2,
left: None,
right: None,
})));
let root1 = Some(Rc::new(RefCell::new(TreeNode {
val: 1,
left: e1,
right: e2,
})));
let ret = Solution::is_symmetric(root1);
assert!(ret)
}
}
......@@ -19,6 +19,7 @@ pub mod interview_54;
pub mod interview_55_1;
pub mod interview_58_2;
pub mod leetcode_100;
pub mod leetcode_101;
pub mod leetcode_1021;
pub mod leetcode_1051;
pub mod leetcode_108;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册