Pythonを使用して、同じラベルを持つサブツリー内のノードの数を見つけるプログラム
ノードに0からn-1までの番号が付けられたn個のノードを持つルート化された一般ツリーがあるとします。各ノードには、小文字の英字のラベルがあります。ラベルはlabels配列の入力として指定されます。ここで、lables[i]にはi番目のノードのラベルが含まれています。ツリーはエッジリストで表され、各エッジeには[u、v]があり、uは親、vは子を表します。サイズnの配列Aを見つける必要があります。これは、iと同じラベルを持つi番目のノードのサブツリー内のノードの数を表します
したがって、入力が次のような場合
ここで、n =5およびlabel=“ ccaca”
ルートには同じラベルの子孫が3つあり、ノード1には子孫が2つあり、他のすべての子孫がそのラベルを保持しているため、出力は[3、2、1、1、1]になります。
これを解決するには、次の手順に従います-
-
E:=指定されたエッジリストからグラフを作成する
-
N:=各ノード番号とそれに対応するラベルを含むマップ
-
R:=サイズnのリストで、0で埋めます
-
関数r()を定義します。これにはniがかかります
-
C:=キーの頻度を保持するためのマップ
-
E [ni]の各eについて、実行
-
E [e]
からniを削除します -
Cでr(e)を更新する
-
-
C
でN[ni]を更新します -
R [ni]:=C [N [ni]]
-
Cを返す
-
メインメソッドからr(0)を呼び出します
-
Rを返す
理解を深めるために、次の実装を見てみましょう-
例
from collections import defaultdict, Counter def solve(n, edges, labels): E = defaultdict(set) for f,t in edges: E[f].add(t) E[t].add(f) N = {i:e for i,e in enumerate(labels)} R = [0]*n def r(ni): C = Counter() for e in E[ni]: E[e].remove(ni) C.update(r(e)) C.update((N[ni])) R[ni] = C[N[ni]] return C r(0) return R n = 5 edges = [[0,1],[0,2],[1,3],[0,4]] labels = "ccaca" print(solve(n, edges, labels))
入力
5, [[0,1],[0,2],[1,3],[0,4]], "ccaca"
出力
[3, 2, 1, 1, 1]
-
Pythonで範囲内のノード数を見つけるプログラム
BSTがあり、左と右の境界lとrもあるとすると、lとrの間に値が存在するルート内のすべてのノードの数を見つける必要があります。 したがって、入力が次のような場合 l =7、r =13の場合、8、10、12の3つのノードがあるため、出力は3になります。 これを解決するために、次の手順に従います- スタック:=スタックと最初にルートを挿入し、カウント:=0 スタックが空でないときに、実行します node:=スタックの最上位要素、およびポップ要素 ノードがnullでない場合、 l<=ノードのデータ<=rの場合、 count:=count + 1
-
リスト内の最小数を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal