/** * `&self` means the method takes an immutable reference. * If you need a mutable reference, change it to `&mut self` instead. */ implBSTIterator { fnnew(root: Option<Rc<RefCell<TreeNode>>>) ->Self { letmut bst_iter = BSTIterator { next: 0, vec: Vec::new(), }; letmut stack = VecDeque::new();
letmut p = root; // Inorder Traversal while p.is_some() || !stack.is_empty() { ifletSome(node) = p { stack.push_back(node.clone()); p = node.borrow().left.clone(); } else { letnode = stack.pop_back().unwrap(); bst_iter.vec.push(node.clone()); p = node.borrow().right.clone(); } } bst_iter }
/** * Your BSTIterator object will be instantiated and called as such: * let obj = BSTIterator::new(root); * let ret_1: i32 = obj.next(); * let ret_2: bool = obj.has_next(); */
fnmain() { // let obj = BSTIterator::new(root); // let ret_1: i32 = obj.next(); // let ret_2: bool = obj.has_next(); }