oppgaver så langt
This commit is contained in:
parent
4f3385850f
commit
df84d4f18e
17 changed files with 628 additions and 0 deletions
6
binary-tree-inorder-traversal-94/Cargo.toml
Normal file
6
binary-tree-inorder-traversal-94/Cargo.toml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[package]
|
||||
name = "binary-tree-inorder-traversal-94"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
75
binary-tree-inorder-traversal-94/src/main.rs
Normal file
75
binary-tree-inorder-traversal-94/src/main.rs
Normal 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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue