私は、バイナリツリーではなく、任意のツリーのツリーの高さを決定する再帰的メソッドを実装しようとしています。我々は2つの入力を与えられ、1つは「n」個の頂点である。 2行目には、頂点の-1からn-1までのn個の整数 が含まれています。それらのi番目のもの(0≤i≤n - 1)が-1の場合、頂点iはルートです。そうでない場合は、i番目の頂点の親の0ベースのインデックスです。正確に1つのルートが存在することが保証されています。入力はツリーを表すことが保証されています。Pythonの再帰的な任意のツリーの高さ
例えば入力される: N = 5 親= [4、-1、4、1、1] これは、ノード0は、ノード4の子であることを意味し、ノード1がルートであり、ノード2ノード4の子であり、ノード3はノード1の子(ルート)であり、ノード4も同様にルート1のノード1の子である。以来:
4 -1 1 1
出力は、我々は遅い方法より速い方法を実施を担当与えられ3のツリーの高さであろう。私はノード入力をどのように入力するのか分かりません。
ありがとうございます!
# python3
import sys, threading
sys.setrecursionlimit(10**7) # max depth of recursion
threading.stack_size(2**27) # new thread will get stack of such size
n = 5
parent = [4, -1, 4, 1, 1]
class TreeHeight:
def read(self, n, parent):
self.n = n
self.parent = parent
def compute_height(self):
# Replace this code with a faster implementation
maxHeight = 0
for vertex in range(self.n):
height = 0
i = vertex
while i != -1:
height += 1
i = self.parent[i]
maxHeight = max(maxHeight, height);
return maxHeight;
def main():
tree = TreeHeight()
tree.read(n, parent)
print(tree.compute_height())
threading.Thread(target=main).start()
ああ、メモ化。私は、ツリーを構築し、既に与えられた方法以外の情報でそれをトラバースする方法を見ることができません。 – Pewnack
これは私の宿題のように見えますが、それはあなたから何らかの努力をしなくても私が喜んで与えるものです: [guidelines](http://meta.stackexchange.com/questions/10811/how-do) -i-ask-and-answer-homework-questions): 生徒の学習に役立たない回答を提供することは、生徒自身の最善の利益ではありません。したがって、宿題の質問を他の質問とは異なる方法で扱うこともできます。 – TemporalWolf
心配はいりません。ありがとう。 – Pewnack