1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #[derive(Debug, PartialEq, Eq)] pub struct TreeNode { pub val: i32, pub left: Option<Rc<RefCell<TreeNode>>>, pub right: Option<Rc<RefCell<TreeNode>>>, }
impl TreeNode { #[inline] pub fn new(val: i32) -> Self { TreeNode { val, left: None, right: None, } } } pub struct Solution;
use std::cell::RefCell; use std::rc::Rc;
impl Solution { pub fn flatten(root: &mut Option<Rc<RefCell<TreeNode>>>) { let mut stack = Vec::new(); let mut vec = Vec::new(); let mut p = root.clone();
while let Some(node) = p { vec.push(node.clone()); if let Some(right) = node.borrow().right.clone() { stack.push(right); } if let Some(left) = node.borrow().left.clone() { p = Some(left); } else { p = stack.pop(); } } for i in 0..vec.len() { let node = vec[i].clone(); node.borrow_mut().left = None; if i + 1 < vec.len() { node.borrow_mut().right = Some(vec[i + 1].clone()); } else { node.borrow_mut().right = None; } } } }
fn main() { println!("Hello, world!"); }
|