Skip to content

Commit e4d2c72

Browse files
committed
Create 0101-symmetric-tree.rs
1 parent a9aa370 commit e4d2c72

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

rust/0101-symmetric-tree.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use std::cell::RefCell;
2+
use std::rc::Rc;
3+
impl Solution {
4+
// Time O(n) - Space O(h)
5+
pub fn is_symmetric(root: Option<Rc<RefCell<TreeNode>>>) -> bool {
6+
// An internal function that checks two nodes situated in a
7+
// symmetrical position in the tree.
8+
fn dfs(left: Option<Rc<RefCell<TreeNode>>>, right: Option<Rc<RefCell<TreeNode>>>) -> bool {
9+
match (left, right) {
10+
(None, None) => true,
11+
(None, Some(_)) | (Some(_), None) => false,
12+
(Some(left), Some(right)) => {
13+
left.borrow().val == right.borrow().val
14+
&& dfs(left.borrow().left.clone(), right.borrow().right.clone())
15+
&& dfs(left.borrow().right.clone(), right.borrow().left.clone())
16+
}
17+
}
18+
}
19+
match root {
20+
Some(root) => dfs(root.borrow().left.clone(), root.borrow().right.clone()),
21+
None => true,
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)