2つのツリーノードが関連しているかどうかを確認します(つまり、祖先-子孫)
- O(N)空間(N =ノード数)を使用して、O(1)時間で解きます
- 前処理が許可されています
それでおしまい。以下の私の解決策(アプローチ)に行きます。最初に自分のことを考えたいのなら、やめてください。
前処理のために、私は事前注文を行い(最初にルートを再帰的に通過し、次に子を通過する)、各ノードにラベルを付けることにしました。
ラベルについて詳しく説明します。各ラベルは、「1,2,1,4,5」のようなコンマ区切りの自然数で構成されます。このシーケンスの長さは、(ノードの深さ+ 1)に等しくなります。たとえば、ルートのラベルが「1」の場合、ルートの子には「1,1」、「1,2」、「1,3」などのラベルが付けられます。次のレベルのノードには「1,1,1」のようなラベルが付けられます。 "、" 1,1,2 "、...、" 1,2,1 "、" 1,2,2 "、..。
ノードの「注文番号」は、その親の子リストの「このノードの1から始まるインデックス」であると想定します。
一般的なルール:ノードのラベルは、親ラベルの後にコンマとノードの「注文番号」が続くもので構成されます。
したがって、O(1)で2つのノードが関連しているかどうか(つまり、祖先-子孫)に答えるために、一方のラベルが他方のラベルの「プレフィックス」であるかどうかを確認します。そのようなラベルがO(N)スペースを占めると見なすことができるかどうかはわかりませんが。
修正または代替アプローチを使用する批評家が予想されます。