aboutsummaryrefslogtreecommitdiff
path: root/other/binary_tree_preorder.rs
diff options
context:
space:
mode:
Diffstat (limited to 'other/binary_tree_preorder.rs')
-rw-r--r--other/binary_tree_preorder.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/other/binary_tree_preorder.rs b/other/binary_tree_preorder.rs
new file mode 100644
index 0000000..da6e0b8
--- /dev/null
+++ b/other/binary_tree_preorder.rs
@@ -0,0 +1,35 @@
+use std::rc::Rc;
+use std::cell::RefCell;
+#[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
+ }
+ }
+}
+
+struct Solution;
+
+impl Solution {
+ pub fn preorder_traversal(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
+ let mut ans: Vec<i32> = Vec::new();
+ let mut stack: Vec<Option<Rc<RefCell<TreeNode>>>> = vec![root];
+ while let Some(last) = stack.pop() {
+ if let Some(n) = last {
+ ans.push(n.borrow().val);
+ stack.push(n.borrow().right.clone());
+ stack.push(n.borrow().left.clone());
+ }
+ }
+ ans
+ }
+}