<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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: ['a', ['b', ['c', ['e']], ['d', ['e']]]] [['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