> Aztec.nr API reference, v6.0.0 (mainnet and testnet). Index: https://docs.aztec.network/aztec-nr-api/v6.0.0/llms.txt

# Struct SingleSubtreeMerkleTree

Module: `noir_aztec::protocol::merkle_tree::test_utils`

```rust
pub struct SingleSubtreeMerkleTree<let SubtreeWidth: u32, let SubtreeHeight: u32, let TreeHeight: u32>
{ /* private fields */ }
```

## Implementations

```rust
impl<let SubtreeWidth: u32, let SubtreeHeight: u32, let TreeHeight: u32> SingleSubtreeMerkleTree<SubtreeWidth, SubtreeHeight, TreeHeight>
```

```rust
pub fn new(subtree_leaves: [Field; SubtreeWidth]) -> Self
```

```rust
pub fn new_with_hasher(
    subtree_leaves: [Field; SubtreeWidth],
    hasher: fn(Field, Field) -> Field,
) -> Self
```

```rust
pub fn new_at_index(
    subtree_leaves: [Field; SubtreeWidth],
    first_leaf_index: Field,
) -> Self
```

```rust
pub fn new_with_hasher_at_index(
    subtree_leaves: [Field; SubtreeWidth],
    first_leaf_index: Field,
    hasher: fn(Field, Field) -> Field,
) -> Self
```

```rust
pub fn new_tree_roots_at_index<let InsertedValueTreeHeight: u32>(
    subtree_leaves: [Field; SubtreeWidth],
    first_leaf_index: Field,
) -> Self
```

The values to be inserted to the subtree are tree roots themselves. The zero hashes will take into account the extra layers (`InsertedValueTreeHeight`) of the inserted values.

```rust
pub fn new_tree_roots_at_index_with_hasher<let InsertedValueTreeHeight: u32>(
    subtree_leaves: [Field; SubtreeWidth],
    first_leaf_index: Field,
    hasher: fn(Field, Field) -> Field,
) -> Self
```

```rust
pub fn get_sibling_path(self, leaf_index: Field) -> [Field; TreeHeight]
```

```rust
pub fn update_leaf(&mut self, leaf_index: Field, value: Field)
```

```rust
pub fn get_root(self) -> Field
```

```rust
pub fn get_next_available_index(self) -> Field
```
