From 43efdf992b3a135b8016122db6500d54377573de Mon Sep 17 00:00:00 2001 From: NikVolf Date: Tue, 24 Sep 2019 15:28:34 +0200 Subject: [PATCH] prepare tree for deleting also --- examples/long.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/examples/long.rs b/examples/long.rs index 45e66c2..85f2c13 100644 --- a/examples/long.rs +++ b/examples/long.rs @@ -12,6 +12,10 @@ fn prepare_tree(vec: &Vec) -> Tree { let mut peak_pos = (1 << (h+1)) - 1; let mut nodes = Vec::new(); + // used later + let mut last_peak_pos = 0; + let mut last_peak_h = 0; + loop { if peak_pos > vec.len() { @@ -22,17 +26,22 @@ fn prepare_tree(vec: &Vec) -> Tree { if peak_pos <= vec.len() { let mut peak: Entry = vec[peak_pos-1].clone().into(); - let left_idx = (peak_pos - (1<) -> Tree { } } - Tree::new(vec.len() as u32, nodes, vec![]) + // for deletion, everything on the right slope of the last peak should be pre-loaded + let mut extra = Vec::new(); + let mut h = last_peak_h; + let mut peak_pos = last_peak_pos; + + while h > 0 { + let left_pos = peak_pos - (1<