Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit dd8ea62

Browse files
committed
tree stuff
1 parent 7702d47 commit dd8ea62

File tree

5 files changed

+100
-2
lines changed

5 files changed

+100
-2
lines changed

‎src/good_nodes.rs‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use crate::TreeNode;
2+
use std::cell::RefCell;
3+
use std::rc::Rc;
4+
pub struct Solution {}
5+
impl Solution {
6+
pub fn good_nodes(root: Option<Rc<RefCell<TreeNode>>>) -> i32 {
7+
fn rec(root: Option<Rc<RefCell<TreeNode>>>, mut max: i32) -> i32 {
8+
if let Some(node) = root {
9+
let node = node.borrow();
10+
let mut count = 0;
11+
if node.val == max {
12+
count = 1;
13+
} else if node.val > max {
14+
count = 1;
15+
max = node.val;
16+
}
17+
return count + rec(node.left.clone(), max) + rec(node.right.clone(), max);
18+
}
19+
0
20+
}
21+
rec(root, i32::MIN)
22+
}
23+
}

‎src/kth_smallest_bst.rs‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use crate::TreeNode;
2+
use std::cell::RefCell;
3+
use std::rc::Rc;
4+
pub struct Solution {}
5+
impl Solution {
6+
pub fn kth_smallest(root: Option<Rc<RefCell<TreeNode>>>, k: i32) -> i32 {
7+
let mut stack: Vec<Rc<RefCell<TreeNode>>> = Vec::new();
8+
let mut count = 0;
9+
let mut cur = root.clone();
10+
while cur.is_some() || !stack.is_empty() {
11+
while let Some(node) = cur {
12+
stack.push(node.clone());
13+
let node = node.borrow();
14+
cur = node.left.clone();
15+
}
16+
cur = stack.pop();
17+
count += 1;
18+
let node = cur.unwrap();
19+
let node = node.borrow();
20+
if count == k {
21+
return node.val;
22+
}
23+
cur = node.right.clone();
24+
}
25+
count
26+
}
27+
}

‎src/main.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
mod level_order;
2-
use level_order::Solution;
1+
mod kth_smallest_bst;
2+
use kth_smallest_bst::Solution;
33
use std::cell::RefCell;
44
use std::rc::Rc;
55
#[derive(Debug, PartialEq, Eq)]

‎src/right_side_view.rs‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use crate::TreeNode;
2+
use std::cell::RefCell;
3+
use std::rc::Rc;
4+
pub struct Solution {}
5+
impl Solution {
6+
pub fn right_side_view(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
7+
use std::collections::VecDeque;
8+
let mut q: VecDeque<Option<Rc<RefCell<TreeNode>>>> = VecDeque::new();
9+
let mut res: Vec<i32> = Vec::new();
10+
q.push_back(root);
11+
while !q.is_empty() {
12+
let len = q.len();
13+
let mut right = 0;
14+
for _i in 0..len {
15+
if let Some(node) = q.pop_front().unwrap() {
16+
let n = node.borrow();
17+
right = n.val;
18+
q.push_back(n.left.clone());
19+
q.push_back(n.right.clone());
20+
}
21+
}
22+
res.push(right);
23+
}
24+
25+
res
26+
}
27+
}

‎src/validate_bst.rs‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use crate::TreeNode;
2+
use std::cell::RefCell;
3+
use std::rc::Rc;
4+
pub struct Solution {}
5+
impl Solution {
6+
pub fn is_valid_bst(root: Option<Rc<RefCell<TreeNode>>>) -> bool {
7+
fn rec(root: Option<Rc<RefCell<TreeNode>>>, min: i64, max: i64) -> bool {
8+
if let Some(node) = root {
9+
let node = node.borrow();
10+
if (node.val as i64) > min && (node.val as i64) < max {
11+
return rec(node.left.clone(), min, node.val.into())
12+
&& rec(node.right.clone(), node.val.into(), max);
13+
} else {
14+
return false;
15+
}
16+
}
17+
true
18+
}
19+
rec(root, i64::MIN, i64::MAX)
20+
}
21+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /