---
name: "Forest::Tree"
section: "3pm"
platform: "linux"
package: "libforest-perl"
version: "0.10-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Forest::Tree"
---

# Forest::Tree(3pm)

An n-ary tree

## NAME

Forest::Tree - An n-ary tree

## SYNOPSIS

```
  use Forest::Tree;
  my $t = Forest::Tree->new(
      node     => 1,
      children => [
          Forest::Tree->new(
              node     => 1.1,
              children => [
                  Forest::Tree->new(node => 1.1.1),
                  Forest::Tree->new(node => 1.1.2),
                  Forest::Tree->new(node => 1.1.3),
              ]
          ),
          Forest::Tree->new(node => 1.2),
          Forest::Tree->new(
              node     => 1.3,
              children => [
                  Forest::Tree->new(node => 1.3.1),
                  Forest::Tree->new(node => 1.3.2),
              ]
          ),
      ]
  );
  $t->traverse(sub {
      my $t = shift;
      print(('    ' x $t->depth) . ($t->node || '\undef') . "\n");
  });
```

## DESCRIPTION

This module is a basic n-ary tree, it provides most of the functionality of Tree::Simple, whatever is missing will be added eventually.

This class inherits from Forest::Tree::Pure\>, but all shared methods and attributes are documented in both classes.

## ATTRIBUTES

- *node*

  - *uid*

  - *parent*

  - **parent**

    - **\_set\_parent**

    - **has\_parent**

    - **clear\_parent**

    - *children*

  - **get\_child\_at ($index)**

    Return the child at this position. (zero-base index)

  - **child\_count**

    Returns the number of children this tree has

- *size*

  - **size**

    - **has\_size**

    - **clear\_size**

    - *height*

  - **height**

    - **has\_height**

    - **clear\_height**

    ## METHODS

- **is\_root**

  True if the current tree has no parent

- **is\_leaf**

  True if the current tree has no children

- **depth**

  Return the depth of this tree. Root has a depth of -1

- **add\_child ($child)**

  - **add\_children (@children)**

  Add a new child. The `$child` must be a `"Forest::Tree"`

- **insert\_child\_at ($index, $child)**

  Insert a child at this position. (zero-base index)

- **remove\_child\_at ($index)**

  Remove the child at this position. (zero-base index)

- **traverse (\\&func)**

  Takes a reference to a subroutine and traverses the tree applying this subroutine to every descendant.

- **siblings**

  Returns an array reference of all siblings (not including us)

- **to\_pure\_tree**

  Invokes `"reconstruct_with_class"` with Forest::Tree::Pure.

- **to\_mutable\_tree**

  Returns the invocant (without cloning).

- **clone**

  See "clone" in Forest::Tree::Pure.

  This variant will **not** clone the parent, but return a clone of the subtree that is detached.

- **get\_index\_in\_siblings**

  Returns the index of the tree in the list of children.

  Equivalent to calling `"$tree-"`parent-\>get\_child\_index($tree)\>.

  Returns -1 if the node has no parent (the root node).

## BUGS

All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT.

## AUTHOR

Stevan Little \<stevan.little@iinteractive.com\>

## COPYRIGHT AND LICENSE

Copyright 2008-2014 Infinity Interactive, Inc.

\<http://www.iinteractive.com\>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
