aboutsummaryrefslogtreecommitdiff
path: root/same_tree.rs
diff options
context:
space:
mode:
Diffstat (limited to 'same_tree.rs')
-rw-r--r--same_tree.rs71
1 files changed, 0 insertions, 71 deletions
diff --git a/same_tree.rs b/same_tree.rs
deleted file mode 100644
index 3d94ffb..0000000
--- a/same_tree.rs
+++ /dev/null
@@ -1,71 +0,0 @@
-use std::rc::Rc;
-use std::cell::Ref;
-use std::cell::RefCell;
-use std::collections::VecDeque;
-type NodeRef = Option<Rc<RefCell<TreeNode>>>;
-#[derive(Debug, PartialEq, Eq)]
-pub struct TreeNode {
- pub val: i32,
- pub left: NodeRef,
- pub right: NodeRef
-}
-
-impl TreeNode {
- #[inline]
- pub fn new(val: i32) -> Self {
- TreeNode {
- val,
- left: None,
- right: None
- }
- }
-}
-
-struct Solution;
-
-impl Solution {
- pub fn is_same_tree(p: NodeRef, q: NodeRef) -> bool {
- //p == q
- let mut dq: VecDeque<(NodeRef, NodeRef)> = VecDeque::new();
- match (p, q) {
- (Some(p), Some(q)) => {
- dq.push_back((Some(Rc::clone(&p)), Some(Rc::clone(&q))));
- }
- (None, None) => return true,
- _ => return false
- }
- while !dq.is_empty() {
- let (p, q) = dq.pop_front().unwrap();
- if !match (&p, &q) {
- (Some(p), Some(q)) => p.borrow().val == q.borrow().val,
- (None, None) => true,
- _ => false
- } {
- return false;
- }
- if let (Some(p), Some(q)) = (p, q) {
- let (p, q) = (
- Solution::clone_nodes(p.borrow()),
- Solution::clone_nodes(q.borrow())
- );
- dq.push_back((p.0, q.0));
- dq.push_back((p.1, q.1));
- }
- }
- true
- }
- fn clone_nodes(tree: Ref<TreeNode>) -> (NodeRef, NodeRef) {
- (
- if tree.left.is_some() {
- Some(Rc::clone(tree.left.as_ref().unwrap()))
- } else {
- None
- },
- if tree.right.is_some() {
- Some(Rc::clone(tree.right.as_ref().unwrap()))
- } else {
- None
- }
- )
- }
-}