oppgaver så langt

This commit is contained in:
Håkon Størdal 2025-03-22 13:49:25 +01:00
parent 4f3385850f
commit df84d4f18e
17 changed files with 628 additions and 0 deletions

View file

@ -0,0 +1,6 @@
[package]
name = "binary-tree-inorder-traversal-94"
version = "0.1.0"
edition = "2024"
[dependencies]

View file

@ -0,0 +1,75 @@
// Definition for a binary tree node.
#[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,
}
}
}
use std::cell::RefCell;
use std::rc::Rc;
pub fn inorder_traversal_recursively(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
let mut result = Vec::new();
helper(&root, &mut result);
result
}
fn helper(node: &Option<Rc<RefCell<TreeNode>>>, result: &mut Vec<i32>) {
if let Some(n) = node {
let n = n.borrow();
helper(&n.left, result); // Left subtree
result.push(n.val); // Current node
helper(&n.right, result); // Right subtree
}
}
pub fn inorder_traversal(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
let mut result = Vec::new();
let mut stack = Vec::new();
let mut current = root;
while current.is_some() || !stack.is_empty() {
while let Some(node) = current {
stack.push(node.clone());
current = node.borrow().left.clone();
}
if let Some(node) = stack.pop() {
let node = node.borrow();
result.push(node.val); // Visit current node
current = node.right.clone();
}
}
result
}
fn main() {
let values = vec![
Some(1),
Some(2),
Some(3),
Some(4),
Some(5),
None,
Some(8),
None,
None,
Some(6),
Some(7),
Some(9),
];
println!("{:?}", values);
}