Pythonの特定の二分木でBSTの最大合計値を見つけるプログラム
二分木が提供されていると仮定します。そのサブツリーに二分探索木(BST)が存在するかどうかを調べ、最大のBSTの合計を見つける必要があります。合計を求めるために、そのBSTの各ノードの値を加算します。合計値を出力として返します。
したがって、入力が次のような場合
その場合、出力は12になります。
与えられた二分木のBSTは-
です
ノードの合計=12。
これを解決するには、次の手順に従います-
- c:=0
- m:=null
- 値:=0
- 関数recurse()を定義します。これはノードを取ります
- ノードがnullでない場合、
- left_val:=recurse(ノードの左側)
- right_val:=recurse(ノードの権利)
- count:=負の無限大
- if(node.leftはnullまたはnode.left.val <=node.valと同じ)and((nodeの右側はnullまたはnode.val <=node.right.valと同じ)、then
- >
- count:=left_val + right_val + 1
- カウント>cの場合、
- c:=カウント
- m:=ノード
- 返品数
- 0を返す
- ノードがnullでない場合、
- 関数calculate_sum()を定義します。これは根を下ろします
- rootがnullと同じでない場合、
- calculate_sum(ルートの左側)
- 値:=値+ルートの値
- calculate_sum(ルートの権利)
- rootがnullと同じでない場合、
- recurse(root)
- calculate_sum(m)
- 戻り値
例
理解を深めるために、次の実装を見てみましょう-
class TreeNode: def __init__(self, val, left = None, right = None): self.val = val self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree= TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree def solve(root): c, m, value = 0, None, 0 def recurse(node): if node: nonlocal c, m left_val = recurse(node.left) right_val = recurse(node.right) count = -float("inf") if (node.left == None or node.left.val <= node.val) and (node.right == None or node.val <= node.right.val): count = left_val + right_val + 1 if count > c: c = count m = node return count return 0 def calculate_sum(root): nonlocal value if root is not None: calculate_sum(root.left) value += root.val calculate_sum(root.right) recurse(root) calculate_sum(m) return value tree = make_tree([1, 4, 6, 3, 5]) print(solve(tree))
入力
tree = make_tree([1, 4, 6, 3, 5]) print(solve(tree))
出力
12
-
Pythonで特定の二分木で最大の完全なサブツリーを見つける
二分木があるとしましょう。この二分木で最大の完全なサブツリーのサイズを見つける必要があります。私たちが知っているように、完全な二分木は、おそらく最終レベルなしですべてのレベルが完全に満たされ、最終レベルに可能な限りすべてのキーが残っている場合、二分木です。 したがって、入力が次のような場合 その場合、出力はサイズとして4になり、順序どおりの走査は10、45、60、70になります。 これを解決するには、次の手順に従います- isComplete、isPerfectなどのいくつかのパラメーターを使用して戻り型を定義します。これらは最初はfalseで、次にsizeとrootTree、
-
Pythonで特定の二分木で最大の完全なサブツリーを見つける
特定の二分木があるとします。与えられた二分木で最大のパーフェクトサブツリーのサイズを見つける必要があります。私たちが知っているように、完全な二分木は、すべての内部ノードに2つの子があり、すべての葉が同じレベルにある二分木です。 したがって、入力が次のような場合 その場合、出力は3になり、サブツリーは これを解決するには、次の手順に従います- RetTypeと呼ばれる1つのブロックを定義します。これは、isPerfect、height、rootTreeを保持し、最初はすべて0です get_prefect_subtree()という関数を定義します。これはルートを取りま