I'm trying to get an efficient algorithm to calculate the height of a tree in Python for large datasets. The code I have works for small datasets, but takes a long time for really large ones (100,000 items) so I'm trying to figure out ways to optimize it but am getting stuck. Sorry if it seems like a really newbie question, I'm pretty new to Python.The input is a list length and a list of values, with each list item pointing to its parent, with list item -1 indicating the root of the tree. So with an input of:54 -1 4 1 1The answer would be 3  the tree is: ({key:1, children: [{key: 3}, {key:4, children:[{key:0, {key:2}]}] }Here is the code that I have so far:import sys, threadingsys.setrecursionlimit(10**7) # max depth of recursionthreading.stack_size(2**25)  # new thread will get stack of such sizeclass TreeHeight:    def read(self):        self.n = int(sys.stdin.readline())        self.parent = list(map(int, sys.stdin.readline().split()))    def getChildren(self, node, nodes):        parent = {'key': node, 'children': []}        children = [i for i, x in enumerate(nodes) if x == parent['key']]        for child in children:            parent['children'].append(self.getChildren(child, nodes))        return parent    def compute_height(self, tree):        if len(tree['children']) == 0:            return 0        else:            max_values = []            for child in tree['children']:                max_values.append(self.compute_height(child))            return 1 + max(max_values)def main():  tree = TreeHeight()  tree.read()  treeChild = tree.getChildren(-1, tree.parent)  print(tree.compute_height(treeChild))threading.Thread(target=main).start()
Finding the tree height in Python
python;performance;beginner;multithreading;tree