struct RoseTree<T:Sized + Clone> {
value: T,
children: Vec<RoseTree<T>>
}

impl<T> Default for RoseTree<T>
where T: Sized + Clone + Default {
fn default() -> Self {
Self {
value: Default::default(),
children: Vec::new()
}
}
}

impl<T> RoseTree<T>
where T: Sized + Clone {
pub fn to_list(&self)-> Vec<T> {
let mut ret = Vec::new();
let mut stack = Vec::new();
ret.push(self.value.clone());
stack.push((self, self.children.iter()));
while !stack.is_empty() {
let top = stack.last_mut().unwrap();
let next = if let Some(it) = top.1.next() {
it
} else {
drop(top);
stack.pop();
continue;
};

drop(top);
ret.push(next.value.clone());
stack.push((next, next.children.iter()));
}

return ret;
}
}

fn main() {
let t1 = RoseTree {
value: 1,
children: vec![
RoseTree {
value: 2,
children: vec![
RoseTree {
value: 3,
children: vec![
RoseTree {
value: 4,
children: vec![]
},
RoseTree {
value: 5,
children: vec![]
}
]
},
RoseTree {
value: 6,
children: vec![]
}
]
},
RoseTree {
value: 7,
children: vec![
RoseTree {
value: 8,
children: vec![]
},
RoseTree {
value: 9,
children: vec![]
}
]
},
RoseTree {
value: 10,
children: vec![
RoseTree {
value: 11,
children: vec![
RoseTree {
value: 12,
children: vec![]
}
]
},
RoseTree {
value: 13,
children: vec![
RoseTree {
value: 14,
children: vec![]
}
]
},
RoseTree {
value: 15,
children: vec![]
}
]
}
]
};

let list = t1.to_list();
println!("{:?}", list);
}

근데 러스트로