Pythonで同じ左と右のサブツリーを持つ最大のサブツリーを検索します
したがって、入力が次のような場合
その場合、出力は次のようになります
これを解決するには、次の手順に従います-
-
関数solve()を定義します。これはroot、encode、maxSize、maxNodeを取ります
-
ルートがNoneの場合、
-
0を返す
-
-
left_list:=空白の文字列を含むリスト
-
right_list:=空白の文字列を含むリスト
-
ls:=resolve(root.left、left_list、maxSize、maxNode)
-
rs:=resolve(root.right、right_list、maxSize、maxNode)
-
サイズ:=ls + rs + 1
-
left_list[0]がright_list[0]と同じ場合、
-
サイズ>maxSize[0]の場合、
-
maxSize [0]:=サイズ
-
maxNode [0]:=root
-
-
-
encode [0]:=encode[0]連結"|" concatenate left_list [0] concatenate "|"
-
encode [0]:=encode[0]連結"|" concatenate str(root.data)concatenate "|"
-
encode [0]:=encode[0]連結"|" concatenate right_list [0] concatenate "|"
-
返品サイズ
-
メインの方法から、次のようにします-
-
最大:=[0]
-
:=リストを空白の文字列でエンコードする
-
解決(ノード、エンコード、最大、maxNode)
-
最大値を返す
例
理解を深めるために、次の実装を見てみましょう-
class TreeNode:
def __init__(self, data):
self.data = data
self.left = self.right = None
def solve(root, encode, maxSize, maxNode):
if (root == None):
return 0
left_list = [""]
right_list = [""]
ls = solve(root.left, left_list, maxSize, maxNode)
rs = solve(root.right, right_list, maxSize, maxNode)
size = ls + rs + 1
if (left_list[0] == right_list[0]):
if (size > maxSize[0]):
maxSize[0] = size
maxNode[0] = root
encode[0] = encode[0] + "|" + left_list[0] + "|"
encode[0] = encode[0] + "|" + str(root.data) + "|"
encode[0] = encode[0] + "|" + right_list[0] + "|"
return size
def largestSubtree(node, maxNode):
maximum = [0]
encode = [""]
solve(node, encode, maximum,maxNode)
return maximum
root = TreeNode(55)
root.left = TreeNode(15)
root.right = TreeNode(70)
root.left.left = TreeNode(10)
root.left.right = TreeNode(25)
root.right.left = TreeNode(75)
root.right.left.left = TreeNode(65)
root.right.left.right = TreeNode(80)
root.right.right = TreeNode(75)
root.right.right.left = TreeNode(65)
root.right.right.right = TreeNode(80)
maxNode = [None]
maximum = largestSubtree(root, maxNode)
print("Root of largest sub-tree",maxNode[0].data)
print("and its size is ", maximum) 入力
root = TreeNode(55) root.left = TreeNode(15) root.right = TreeNode(70) root.left.left = TreeNode(10) root.left.right = TreeNode(25) root.right.left = TreeNode(75) root.right.left.left = TreeNode(65) root.right.left.right = TreeNode(80) root.right.right = TreeNode(75) root.right.right.left = TreeNode(65) root.right.right.right = TreeNode(80)
出力
Root of largest sub-tree 70 and its size is [7]
-
Pythonで特定の二分木で最大の完全なサブツリーを見つける
二分木があるとしましょう。この二分木で最大の完全なサブツリーのサイズを見つける必要があります。私たちが知っているように、完全な二分木は、おそらく最終レベルなしですべてのレベルが完全に満たされ、最終レベルに可能な限りすべてのキーが残っている場合、二分木です。 したがって、入力が次のような場合 その場合、出力はサイズとして4になり、順序どおりの走査は10、45、60、70になります。 これを解決するには、次の手順に従います- isComplete、isPerfectなどのいくつかのパラメーターを使用して戻り型を定義します。これらは最初はfalseで、次にsizeとrootTree、
-
Pythonで特定の二分木で最大の完全なサブツリーを見つける
特定の二分木があるとします。与えられた二分木で最大のパーフェクトサブツリーのサイズを見つける必要があります。私たちが知っているように、完全な二分木は、すべての内部ノードに2つの子があり、すべての葉が同じレベルにある二分木です。 したがって、入力が次のような場合 その場合、出力は3になり、サブツリーは これを解決するには、次の手順に従います- RetTypeと呼ばれる1つのブロックを定義します。これは、isPerfect、height、rootTreeを保持し、最初はすべて0です get_prefect_subtree()という関数を定義します。これはルートを取りま