Recursively constructs a list of pointers of the tree's structure

        Args:
            labels (bool): If True, returned lists consist of node labels.
                           If False (default), lists consist of node
                           pointers. This option is mostly intended for
                           debugging purposes.

            unique (bool): If True, return lists of all unique, linear branches
                           of the tree. More accurately, it returns a list
                           of lists where each list contains a single,
                           unique, linear path from the calling node to the
                           tree's leaf nodes. If False (default),
                           a highly-nested list is returned where each nested
                           list represents a branch point in the tree.
                           See Examples for more.

        Examples:
            >>> from arandomness.trees import OmniTree
            >>> a = OmniTree(label='a')
            >>> b = OmniTree(label='b', parents=[a])
            >>> c = OmniTree(label='c', parents=[b])
            >>> d = OmniTree(label='d', parents=[b])
            >>> e = OmniTree(label='e', parents=[c, d])
            >>> a.find_branches(labels=True)
            ['a', ['b', ['c', ['e']], ['d', ['e']]]]
            >>> a.find_branches(labels=True, unique=True)
            [['a', 'b', 'c', 'e'], ['a', 'b', 'd', 'e']]

def find_branches(self, labels=False, unique=False):
        """Recursively constructs a list of pointers of the tree's structure

        Args:
            labels (bool): If True, returned lists consist of node labels.
                           If False (default), lists consist of node
                           pointers. This option is mostly intended for
                           debugging purposes.

            unique (bool): If True, return lists of all unique, linear branches
                           of the tree. More accurately, it returns a list
                           of lists where each list contains a single,
                           unique, linear path from the calling node to the
                           tree's leaf nodes. If False (default),
                           a highly-nested list is returned where each nested
                           list represents a branch point in the tree.
                           See Examples for more.

        Examples:
            >>> from arandomness.trees import OmniTree
            >>> a = OmniTree(label='a')
            >>> b = OmniTree(label='b', parents=[a])
            >>> c = OmniTree(label='c', parents=[b])
            >>> d = OmniTree(label='d', parents=[b])
            >>> e = OmniTree(label='e', parents=[c, d])
            >>> a.find_branches(labels=True)
            ['a', ['b', ['c', ['e']], ['d', ['e']]]]
            >>> a.find_branches(labels=True, unique=True)
            [['a', 'b', 'c', 'e'], ['a', 'b', 'd', 'e']]
        """

        branches = []

        # Assign proper item, pointer or label, to return
        if labels is True:
            identifier = [self.label]
        else:
            identifier = [self]

        if self._children == []:  # Base Case: current node is a leaf/end node
            return identifier

        else:  # Recursive Case: all other nodes
            for child in self._children:
                if unique is True:
                    for branch in child.find_branches(labels=labels,
                                                      unique=True):
                        # I don't know why this 'if' is necessary, but it is
                        if type(branch) is not list:
                            branch = list(branch)
                        branches.append(identifier + branch)
                else:
                    branches.append(child.find_branches(labels=labels))

            # Proper construction of list depends on 'unique'
            if unique is True:
                return branches
            else:
                return identifier + branches