Skip to content

Instantly share code, notes, and snippets.

@fatihgokce
Last active December 10, 2022 17:08
Show Gist options
  • Save fatihgokce/f92d0b5dd2ca1cdb58e14a395a886525 to your computer and use it in GitHub Desktop.
Save fatihgokce/f92d0b5dd2ca1cdb58e14a395a886525 to your computer and use it in GitHub Desktop.
use std::cell::RefCell;
use std::rc::Rc;
#[derive(Debug, PartialEq)]
struct Node2 {
data: i32,
left: Option<Rc<RefCell<Node2>>>,
right: Option<Rc<RefCell<Node2>>>,
}
fn add2(tree:&mut Rc<RefCell<Node2>>, x: i32){
let mut u=tree.borrow_mut();
if u.data==x{
return;
}
let t=u.data;
let target_node = if x < t { &mut u.left } else { &mut u.right };
match target_node {
Some(node)=>add2(node, x),
None=>{
let new_node=Node2{data:x,left:None,right:None};
let boxed=Some(Rc::new(RefCell::new(new_node)));
*target_node=boxed;
}
}
}
fn travel2(tree: &Rc<RefCell<Node2>>) {
let l=&tree.borrow().left;
if let Some(t)=l{
travel2(t);
}
let d=tree.borrow().data;
println!("{}",d);
let r=&tree.borrow().right;
if let Some(t)=r{
travel2(t);
}
}
fn main() {
let node=Node2{data:12,left:None,right:None};
let mut tree=Rc::new(RefCell::new(node));
let b=&mut tree;
add2(b, 200);
add2(b, 190);
add2(b, 213);
add2(b, 56);
add2(b, 24);
add2(b, 18);
add2(b, 27);
add2(b, 28);
travel2(&tree);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment